【C++】语法、概念、Bug总结
文章目录
- 前言
- 一、基本语法
- 1.运算符
- 1.1位运算
- 1.2 逻辑运算符
- 2.输入输出
- 2.1 格式化输出
- 3.变量/数据类型
- 3.1数据类型转换
- 3.2 string
- 3.3 关键字
- 5.容器
- 5.1 set
- 5.2 map
- 5.3 vector
- 5.9 方法
- 7.函数
- 8.C语言文件操作
- 9.C++文件操作
- 10.指针
- 10.1vector
- 11.类
- 12库
- 13.其他
- 14.头文件
- 二、Bug
- 三、其他
- 四、基本概念辨析
- 总结
前言
将平时使用C++时遇到的Bug、概念盲区汇总下来,同时也慢慢将语法整理进来,链接内容都是一些优质的博客,后面会持续更新过,欢迎转发关注。
一、基本语法
1.运算符
1.1位运算
- 异或的逆元
1.2 逻辑运算符
- C++ 异或运算
2.输入输出
2.1 格式化输出
-
printf 格式化输出右对齐补零
-
printf输出指针内容: printf("%p",s);
-
cin.getline() 和 getline()
//cin.getline()用法:接收一个字符串,可以接收空格并输出
//cin接收一个字符串,遇“空格”、“TAB”、“回车”就结束
#include
using namespace std;
main ()
{char m[20];cin.getline(m,5);cout<<m<<endl;
}//getline()用法:接收一个字符串,可以接收空格并输出,需包含“#include”
#include
#include
using namespace std;
main ()
{string str;getline(cin,str);cout<<str<<endl;
}
3.变量/数据类型
3.1数据类型转换
- int转string
- double与string的相互转化(C++)
- vector转string
#include
#include
#include
#include
vector<int> vec={1,0,1,1,0};
stringstream ss;
string str;
copy(vec.begin(),vec.end(),ostream_iterator<int>(ss,""));
str=ss.str();
- vector<string>转string
#include
#include
#include // 函数所在的库
#include
using namespace std;
int main()
{string strData;vector<string> vec = { "hello world" };strData = accumulate(vec.begin(), vec.end(), strData);cout << strData << endl;
}
//如果是vector中有多个分割开的元素,想要其中某个或者全部拼接为string字符串,
//则使用for循环遍历赋值(累加拼接)。
3.2 string
- 利用Iterator和erase删除String指定位置的字符
string s = "abcdefg";int i = 3;string::iterator itr = s.begin();itr+=i;s.erase(itr);s.erase(itr);cout<<s;
这里我们利用string的一个函数erase(iterator)来删除指定位置上的字符,这里的iterator迭代器可以通过string.begin()获得该字符串的首迭代器,再加上不同的数值来进行删除操作。这里我们是想删除"de",由于我们获得了首迭代器并且加了数值,此时删除的是"d",如果再想删除“e”,我们不需要再进行任何数值的增添,因为此时"e"的位置就在刚刚"d"的位置上,只需要再次进行erase()即可。
- 根据下标和erase删除String指定位置的字符
- 初始化指定长度字符串:
string result(length, 0);
- 反转字符串
reverse(a.begin(), a.end());
3.3 关键字
- enum(C语言-枚举)
- #iddef #endif
- throw
5.容器
- C++的list,stack,queue、set、map等知识汇总
5.1 set
- 集合set
- C++ 集合set 详解
- c++中set的用法;我觉得很详细了,改到窒息
- set的erase函数
- set中find()的用法
- unordered_set用法
bool hasCycle(ListNode *head) {unordered_set<ListNode*> seen;while (head != nullptr) {if (seen.count(head)) {return true;}seen.insert(head);head = head->next;}return false;}
5.2 map
- map遍历
- Map集合如何遍历
- C++ map用法总结(整理)
- map和unordered_map的差别和使用
- C++11 unordered_map详细介绍
- unordered_map遍历
unordered_map<string , int> save;
string counS;
save[counS]=0;unordered_map<string , int>::iterator it = save.begin();
while(it != save.end()){cout<<it->first<<" "<<it->second<<endl;it++;
}
int main ()
{unordered_map<string,double>myrecipe,mypantry = {{"milk",2.0},{"flour",1.5}};/****************插入*****************/pair<string,double> myshopping ("baking powder",0.3);myrecipe.insert (myshopping); // 复制插入myrecipe.insert (make_pair<string,double>("eggs",6.0)); // 移动插入myrecipe.insert (mypantry.begin(), mypantry.end()); // 范围插入myrecipe.insert ({{"sugar",0.8},{"salt",0.1}}); // 初始化数组插入(可以用二维一次插入多个元素,也可以用一维插入一个元素)myrecipe["coffee"] = 10.0; //数组形式插入display(myrecipe,"myrecipe contains:");/****************查找*****************/unordered_map<string,double>::const_iterator got = myrecipe.find ("coffee");if ( got == myrecipe.end() )cout << "not found";elsecout << "found "<<got->first << " is " << got->second<<"\n\n";/****************修改*****************/myrecipe.at("coffee") = 9.0;myrecipe["milk"] = 3.0;display(myrecipe,"After modify myrecipe contains:");/****************擦除*****************/myrecipe.erase(myrecipe.begin()); //通过位置myrecipe.erase("milk"); //通过keydisplay(myrecipe,"After erase myrecipe contains:");/****************交换*****************/myrecipe.swap(mypantry);display(myrecipe,"After swap with mypantry, myrecipe contains:");/****************清空*****************/myrecipe.clear();display(myrecipe,"After clear, myrecipe contains:");return 0;
}
5.3 vector
- 获取vector变量首地址
// 取首地址的方法
cout << arrs.data() <<endl;
cout << &arrs[0] <<endl;
cout << &arrs.at(0) << endl;
cout << &arrs.front() << endl;
cout << &*arrs.begin() << endl;
- vector容器c++11中emplace_back vs push_back
5.9 方法
- reverse函数:反转容器内容
7.函数
- C++函数参数的缺省值
8.C语言文件操作
- fseek(),ftell()
9.C++文件操作
- fstream进行文件的追加操作
10.指针
10.1vector
-
c++中vector和vector
的用法比较 -
C++中vector和vector
>有什么区别 -
C++之vector与指针
-
C/C++指针详解之基础篇(史上最全最易懂指针学习指南!!!!)
-
关于C++函数返回指针的情况
11.类
- C++中的类模板Template
12库
- STL中erase()小心使用
13.其他
- 迭代器(这是我看的关于迭代器最全的文章)
- C++ move()函数
- 《C++ Primer》读书笔记第十一章-2-关联容器操作
- C++中try/catch/throw的使用
- std::ostringstream的用法
- C++ stringstream
- c++ STL中sort函数的三种使用方法
- STL中replsce()用法
s.replace(i, 1, "%20");//从i位置开始的1个字符替换为%20
14.头文件
#include ///sort()函数需要
二、Bug
- Visual Studio使用OpenCV显示错误error LNK2001: 无法解析的外部符号
- 解决Win10下_findnext()异常
- 出现:collect2: error: ld returned 1 exit status的原因之一
- 编译错误: Line 30: Char 5: fatal error: control may reach end of non-void function [-Wreturn-type] }
- VS2017出现C4996 ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead.错误
- new types may not be defined in a return type
三、其他
- assert有什么作用
- string::npos的含义
- 异或的逆元
- C++标准库算法
- C++的STL中accumulate的用法
- c++优先队列(priority_queue)用法详解
四、基本概念辨析
- C++中STL用法超详细总结
- c++“声明”和“定义”的区别
- typedef struct和struct定义结构体的区别
- free(p)和p=NULL的区别
//举例说明
//收回分配给cur的空间,收回后cur还指向之前的地址,
//不过里面的内容已经被清空是乱码
free(cur);
//赋值为NULL,就是让其指向NULL这个地址,
//但是分配给p的那块内存不会收回去,这样就会造成内存的浪费!
cur = NULL;//标准写法
SLinkList* cur = *ppHead; //定义结构体指针cur
free(cur); //收回其空间
cur = NULL; //让其指向NULL这个地址
//代码连接:https://blog.csdn.net/meng_lemon/article/details/82053993?spm=1001.2014.3001.5506)
- 深入理解char * ,char ** ,char a[ ] ,char *a[] 的区别
- 指针和引用区别
- String是值传递还是引用传递
- 字符串指针(string类)
- C++ string 如何使用指针
- string与参数引用传递
- 段错误
总结
后面会持续更新过,欢迎转发关注。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
