string(C++Primer 5th)
string & vector
string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列。
using声明
头文件不应包含using声明,否则头文件的内容会拷贝到所有引用它的文件中去。
string初始化赋值
使用等号=初始化的是拷贝初始化,不使用等号的称为直接初始化。
size()函数的返回值是类型size_type,无符号整数型。如果n是负值的int,则s.size()
string s(10,'c'); // s的内容是cccccccccc
cin>>word; // 遇到空格停止
getline(cin,line); // 读入一整行,直到换行符
auto len = line.size(); // len的类型是string::size_type
string s1 = s + "," + "world"; // 加法需保证+两次的运算对象至少有一个是string
string s2 = "hello" + "," + s1; // 错误:两个运算对象都不是string
使用C++版本的C标准库头文件
一般来说,C++程序应该使用名为cname的头文件而不使用name.h的形式。
基于范围的for语句
// 统计string对象中标点符号的个数
string s("Hello World!!!");
decltype(s.size()) punct_cnt=0; // 用于统计个数,无符号整型确保下标不小于0
for(auto c:s)
if(ispunct(c)) punct_cnt++;
// 使用范围for语句改变字符串中的字符
string s("Hello World!!!");
for(auto &c:s)
c = toupper(c); // 将string对象转换成大写
cout << s << endl;
vector
vector概念
标准库类型vector表示对象的集合,其中所有对象的类型都相同,通常也称容器。
vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,如vector<int>、vector<vector<int>>
由于引用不是对象,所以不存在包含引用的vector。
列表初始化 OR 元素数量
vector<int> v1(10); // v1有10个元素,每个的值都是0
vector<int> v2{
10}; // v2有1个元素,该元素的值是10