C++学习笔记
2017-04-24 22:14
106 查看
1.范围for循环
//将字符串s全变为大写 for(char &i : s) { i = toupper(i);//字符处理函数<cctype> }
范围for语句是C++11标准,用g++编译时,需要加上
-std=c++11,不然会提示
range-based ‘for’ loops are not allowed in C++98 mode
范围for循环相对于传统for循环和while循环的优点是,我们无需关心循环边界条件,防止越界访问。
2.字符串输入
cin:忽略输入空白符
string temp; while(cin >> temp){ cout << temp <<endl;//temp中无换行符 }
用cin输入字符串,cin会忽略输入流中的空白(空格符、换行符、制表符等),将连续的字符提取出来。例如输入分隔开的”hello world!”,实际会进入两次while,temp先是”hello”,再是”world!”
getline():保留输入空白符
string temp; while(getline(cin, temp){ cout << temp <<endl;//temp中无换行符 }
用getline()输入字符串,可保留输入时的空白符。getline()在遇到换行符时会返回,返回时,不会将换行符保存到字符串中。
3.字符串、数组初始化
字符数组初始化
//错误,应该为char str[2] = "a"; char str[1] = "a"; //错误,字符数组未显式初始化 char str[5]; cout << str << endl; //错误,不允许拷贝初始化 char a[] = b;
用字符串字面值初始化字符数组。上述语句会编译报错
error: initializer-string for array of chars is too long,
"a"是字符串,编译器会在字符串后面添加一个空字符串
'\0',因此字符串字面值的实际长度要比它的内容多1,数组中包含
\0.
字符数组未显式初始化时,里面的内容是未定义的,我们不知道里面是什么内容。
数组不允许拷贝初始化。
字符串初始化
//正确,str不包含\0 string str = "a"; //正确,string未显式初始化,默认初始化为空串 string str; cout << str <<endl; //正确,string支持拷贝初始化 string a = b;
用字符串字面值初始化string对象。字符串字面值包含
A和
\0,初始化时,除了最后的空子符外,其他的字符都被拷贝到新创建的string对象中,即string对象中不包含
\0。
string对象未显式初始化时,执行默认初始化,str是一个空字符串。
string对象支持拷贝初始化。
4.C++新接口与C旧接口的转换
//string --> char* const char *str = s.c_str();//str必须为const //char[] --> string char str = "a"; string s = str;//对于string s = "a",我们可以将字符串字面值"a"替换为以空字符结尾的str //int[] --> vector<int> int arr[] = {0,1,2}; vector<int> vec(begin(arr), end(arr)); //vector<int> --> int[],for循环 vector<int> vec{0,1,2}; int arr[3]; for(int *i = begin(arr); i != end(arr); i++) *i = vector[i-begin(arr)];
1.迭代器end()指向尾元素的下一个元素,这样当begin!=end时,说明容器中还有内容。
2.迭代器的判断用!=而不用<,是因为所有标准容器的迭代器都支持!=,而运算符<并不是所有容器都支持。
5.STL中的一些坑
//accumulate的第三个参数如果是0,那么返回的是int型2;如果参数是0.0,那么返回的是double型2.1 vector<double> vec{1.1, 1}; auto res = accumulate(vec.cbegin(), vec.cend(), 0.0) //10.5 //10.7
相关文章推荐
- C++学习笔记二 —— 3.3 指针类型
- more effective c++学习笔记 ---- 条款31
- unix_c++学习笔记1
- c++学习笔记
- c++学习笔记 2005-9
- 一个C++程序员的Delphi学习笔记
- C++ 学习笔记 I/O流的常用控制符
- 高质量C++/C编程指南学习笔记(上)
- c++入门学习笔记指针篇
- C++学习笔记-类的继承(派生类)
- 不能空着,发篇以前的C++学习笔记,不过现在在学C#
- C++学习笔记(1)——基类、派生类的对象空间
- C++学习笔记
- C++学习笔记(5)
- 从今天开始每天写C++或其他学习的知识的笔记,以激励自己
- C++ :学习Proxy Class之笔记2
- 一个C++程序员的Delphi学习笔记
- C++的学习笔记
- c++学习笔记
- C++ 学习笔记