C++ Primer阅读笔记--标准库类型string和vector的使用
1--string类型
① string::size_type 类型
std::string s1;
std::string::size_type len = s1.size();
size() 函数返回的类型是 string::size_type,其是一个无符号类型的值,可用于存放任何 string 对象的大小;
在 C++ 11 新标准中,允许编译器通过 auto 或者 decltype 来自动推断变量的类型,则:auto len = s1.size();
② 字面值与 string 对象相加
当使用加法运算符(+)将操作 string 对象时,必须保证加法运算符两侧的运算对象至少有一个是 string;
string s1 = "hello";
string s2 = s1 + ","; //正确,s1为string对象,把一个 string 对象和一个字面值相加
string s3 = "hello" + ","; //错误,两个运算对象都不是 string
string = s1 + "," + "world"; // 正确,因为 s1+","返回的是一个string类型
③ 基于 for 语句处理 string 字符
for (declaration : expression)
statement
expression 是一个 string 对象,在每次迭代中,expression 的一个字符会用于初始化变量 declaration;
std::string str("some string")
for(auto c : str)
std::cout << c << std::endl;
2--补充知识
C++标准库中除了定义 C++ 语言特有的功能外,也兼容了 C 语言的标准库;对于 C 语言中形如 name.h 的头文件,C++ 则命名为 cname,以此说明该头文件属于 C 语言标准库;一般在 C++ 程序中建议在使用 C 语言标准库时,使用 cname 而不是 name.h;
3--vector类型
vector 能容纳绝大多数类型的对象作为其元素,但由于引用不是对象,所以不存在包含引用的 vector;
通过引用遍历 vector 的元素,可以修改容器的元素;
vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9}
for(auto &i : v)
i *= i;
4--迭代器
拥有迭代器的标准库类型使用 iterator 和 const_iterator 来表示迭代器的类型:
vector<int>::iterator it; // it能读写 vector<int> 的元素
string::iterator it2; // it2能读写 string 对象中的字符
vector<int>::const_iterator it3; // it3只能读元素,不能写元素
string::const_iterator it4; // it4只能读字符,不能写字符
如果 vector 对象或 string 对象是一个常量,则只能使用 const_iterator;如果 vector 对象或 string 对象不是一个常量,则既能使用 iterator 也能使用 const_iterator;
begin 和 end 返回的具体类型由对象是否是常量决定,如果对象是常量,则 begin 和 end 返回 const_iterator;如果对象不是常量,则返回 iterator;
为了专门得到 const_iterator 类型的返回值,C++11 新标准引入了 cbegin 和 cend 两个函数;
vector<int> v;
auto it3 = v.cbegin(); // it3的类型是vector<int>::const_iterator