文章目录
前言
将平时使用C++时遇到的Bug、概念盲区汇总下来,同时也慢慢将语法整理进来,链接内容都是一些优质的博客,后面会持续更新过,欢迎转发关注。
一、基本语法
1.运算符
1.1位运算
1.2 逻辑运算符
2.输入输出
2.1 格式化输出
-
printf输出指针内容: printf("%p",s);
//cin.getline()用法:接收一个字符串,可以接收空格并输出
//cin接收一个字符串,遇“空格”、“TAB”、“回车”就结束
#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}
//getline()用法:接收一个字符串,可以接收空格并输出,需包含“#include<string>”
#include<iostream>
#include<string>
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}
3.变量/数据类型
3.1数据类型转换
- int转string
- double与string的相互转化(C++)
- vector转string
#include <iostream>
#include <vector>
#include <iterator>
#include <sstream>
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 <vector>
#include <string>
#include <numeric> // 函数所在的库
#include <iostream>
using namespace std;
int main()
{
string strData;
vector<string> vec = { "hello world" };
strData = accumulate(vec.begin(), vec.end(), strData);
cout << strData << endl;
}
//如果是vector<string>中有多个分割开的元素,想要其中某个或者全部拼接为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.容器
5.1 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
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";
else
cout << "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"); //通过key
display(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
// 取首地址的方法
cout << arrs.data() <<endl;
cout << &arrs[0] <<endl;
cout << &arrs.at(0) << endl;
cout << &arrs.front() << endl;
cout << &*arrs.begin() << endl;
5.9 方法
7.函数
8.C语言文件操作
9.C++文件操作
10.指针
10.1vector
11.类
12库
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<algorithm>///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
三、其他
四、基本概念辨析
//举例说明
//收回分配给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与参数引用传递
- 段错误
总结
后面会持续更新过,欢迎转发关注。