C++学习笔记
来源:互联网 发布:java自然语言处理 pdf 编辑:程序博客网 时间:2024/06/07 08:30
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不包含\0string 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[] --> stringchar 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.1vector<double> vec{1.1, 1};auto res = accumulate(vec.cbegin(), vec.cend(), 0.0)//10.5//10.7
- C++/C学习笔记
- 【C/C++】STL学习笔记
- C/C学习笔记/导言
- C/C学习笔记/结构
- 【c/c++】学习笔记1
- C学习笔记1
- TPC-C学习笔记
- c语言学习笔记
- C语言学习笔记
- C语言学习笔记
- 学习笔记之c
- C#-学习笔记
- Objective-C学习笔记
- C++PRIMER学习笔记
- C学习笔记
- C 学习笔记
- C/C++学习笔记
- 1.C学习笔记
- 微信获取用户的经纬度与物理地址转换
- 微信小程序完整精品demo:移动小商城:基于node,包含前后台
- nginx编译和调试
- SDR WiFi平台 gr-ieee802-11 软件无线电实现802.11协议
- 构想中的进阶智人
- C++学习笔记
- 原生js操作DOM元素
- 函数栈的内存分配大小
- 小程序学习用demo推荐:豆瓣使用es6;附开发总结(适用1221)
- Android开发07_Service服务
- MySQL-5.7解压版(zip版)安装配置教程
- Leetcode 之 Swap Nodes in Pairs
- 剑指offer在线编程
- lintcode,翻转链表 II