C++写算法题时常见问题(稳定更新)

目录

1.如何用 getline 函数读取用户输入的一行

2.如何防止用 scanf 读取字符时读取了 换行和空格

3.map和unordered_map的差别和使用

4.“表达式求值”问题解析

5.运行报RE错误

6.在set或者map里面使用结构体

7.运行时报TLE时,时间复杂度问题

8.double类型的输入和输出


1.如何用 getline 函数读取用户输入的一行

代码源于蓝桥杯演示文档

#include 
#include 
#include 
 
int main()
{
    // 问候用户
    std::string name;
    std::cout << "What is your name? ";
    std::getline(std::cin, name);
    std::cout << "Hello " << name << ", nice to meet you.\n";
 
    // 逐行读文件
    std::istringstream input;
    input.str("1\n2\n3\n4\n5\n6\n7\n");
    int sum = 0;
    for (std::string line; std::getline(input, line); ) {
        sum += std::stoi(line);
    }
    std::cout << "\nThe sum is: " << sum << "\n";
}

输出:

What is your name? John Q. Public
Hello John Q. Public, nice to meet you.
 
The sum is 28

2.如何防止用 scanf 读取字符时读取了 换行和空格

常见错误:

C++写算法题时常见问题(稳定更新)_第1张图片C++写算法题时常见问题(稳定更新)_第2张图片

解决方案:scanf(" %c",&c);在%前加空格

解决后:

C++写算法题时常见问题(稳定更新)_第3张图片C++写算法题时常见问题(稳定更新)_第4张图片

3.map和unordered_map的差别和使用

map和unordered_map的差别和使用_map和unorderedmap的区别-CSDN博客

4.“表达式求值”问题解析

AcWing 3302. 表达式求值:多图讲解运算符优先级+详细代码注释 - AcWing

5.运行报RE错误

可能存在的问题:

1.在函数里面的数组开太大(原因:数组定义在函数里面会直接在堆栈里面申请空间)。故大数组务必放在函数外面作为全部变量。

2.出现了除0,检查除法有没有可能会导致除0的地方。

3.堆栈溢出,即1或者递归调用次数过多

4.在scanf("%d",a);给a赋值的时候没有加&

5.数组开的小,导致数组下标越界

6.在set或者map里面使用结构体

当我们需要在set和map里面使用结构体的时候,需要对运算符进行重载

下面给出例子:

在结构体外进行运算符重载:

struct Person {
    std::string name;
    int age;
};

bool operator<(const Person& p1, const Person& p2) {
    return p1.age < p2.age;
}

bool: 这是函数的返回类型,表示返回一个布尔值。
operator<: 这是 < 运算符的函数形式,表示重载了小于运算符。
(const Person& p1, const Person& p2): 这是函数的参数,它们是常量引用类型的 Person 对象,用于比较两个 Person 对象的年龄。
{}: 这是函数体的起始和结束符号,表示函数体内的代码块。

或者也可以采用在结构体内进行运算符重载:

struct Person {
    std::string name;
    int age;
    bool operator <(const Person& p)const{
        return age

详细关于运算符重载:运算符重载(在c++中使用set、map存储结构体)-CSDN博客 

7.运行时报TLE时,时间复杂度问题

写的算法的时间复杂度小于或者等于10^8我们都认为该算法能够在1s之内,故运行时报TLE时,需检查自己写的算法,耗费时间最大的地方的时间复杂度能否优化,改写你的算法 

8.double类型的输入和输出

scanf 输入double类型时,必须使用%lf

printf 输出double类型时,使用%lf和%f都可以,但根据C语言标准,应该使用"%f“格式符来输出double类型的值,故推荐大家输出double类型时使用%f

你可能感兴趣的:(蓝桥杯备战知识汇总,常见错误总结,c++,常见问题总结)