目录
1.如何用 getline 函数读取用户输入的一行
2.如何防止用 scanf 读取字符时读取了 换行和空格
3.map和unordered_map的差别和使用
4.“表达式求值”问题解析
5.运行报RE错误
6.在set或者map里面使用结构体
7.运行时报TLE时,时间复杂度问题
8.double类型的输入和输出
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
常见错误:
解决方案:scanf(" %c",&c);在%前加空格
解决后:
map和unordered_map的差别和使用_map和unorderedmap的区别-CSDN博客
AcWing 3302. 表达式求值:多图讲解运算符优先级+详细代码注释 - AcWing
可能存在的问题:
1.在函数里面的数组开太大(原因:数组定义在函数里面会直接在堆栈里面申请空间)。故大数组务必放在函数外面作为全部变量。
2.出现了除0,检查除法有没有可能会导致除0的地方。
3.堆栈溢出,即1或者递归调用次数过多
4.在scanf("%d",a);给a赋值的时候没有加&
5.数组开的小,导致数组下标越界
当我们需要在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博客
写的算法的时间复杂度小于或者等于10^8我们都认为该算法能够在1s之内,故运行时报TLE时,需检查自己写的算法,耗费时间最大的地方的时间复杂度能否优化,改写你的算法
scanf 输入double类型时,必须使用%lf
printf 输出double类型时,使用%lf和%f都可以,但根据C语言标准,应该使用"%f“格式符来输出double类型的值,故推荐大家输出double类型时使用%f