getline
函数getline
函数的参数是一个输入流和一个string对象,函数从输入流中读入内容,直到遇到换行符为止(换行符也被读入),但是string对象中却不包含换行符。
string::size_type
对于string
的size
函数来说,返回的是一个string::size_type
类型的值;
当把string
对象和字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string
:
string s4 = s1 + ", ";
string s5 = "hello" + ", "; // 错误,两个运算对象都不是string
string s6 = s1 + ", " + "world";
string s7 = "hello" + ", " + s2;
string
对象中的字符改变某个字符的特性,在cctype
头文件中定义:
isalnum(c),isalpha(c),isdigit(c)...
vector
需要注意的是,在早期版本的C++标准中,如果vector的元素还是vector(或者其他模板类型),则应该写成:
vector >而非vector> // 注意区别为空格
vector的列表初始值还是元素数量区别,根据()
或者{}
判断:
vector v1(10) // 10个元素
vector v1{10} // 一个元素,值为0
针对于{}
初始化的形式,如果提供的值不能用来列表初始化,此时就要考虑用这样的值来构造vector
对象了。
vector strVec{10}; // 此时是创建了拥有10个元素的值初始化的vector
vector strVec{10, "hi"} // 此时创建了包含有10个“hi”的vector
vector strVec(10, "hi") // 同上
vector strVec("hi") // 报错,为甚麽这个不能解释为含有一个“hi”的vector,理解应该是“()”中
// 有1个元素的时候,已经明确规定是表示的大小,必须为正整数
创建vector对象时,往往是创建一个空的vector,然后通过push_back
方法向里面追加元素。
.begin()
,.end()
begin()
,end()
这两个函数包含在头文件iterator
中,
获得数组的头指针和尾后指针,将数组作为参数传入:
int ia[] = {1,2,3,4,5,6}
int *beg = begin(ia);
int *last = end(ia);
C风格的字符串需要以’\0’结尾,与此相关的库函数包含在头文件string.h
中,但都要求传入的字符串需要以‘\0’结尾,才能正常工作。
允许使用以空字符结尾的字符数组来初始化string对象或为string对象赋值;在string 对象的加法运算中,允许使用以空字符结束的字符数组作为其中一个运算对象(但是不能两个都是)。
很多c++程序在标准库出现之前就已经写成了,因此肯定没有用到string和vector类型,因此c++为了与旧代码进行衔接,专门提供了一组功能:混用string和c风格的字符串。
在以string作为参数的方法中可以传入c风格的字符串,反之则不可以将string传给以c风格字符串作为参数的方法。
作为补充,c++提供了将string转换为c风格字符串的方法:c_str()
,返回的则是一个指向数组的指针,因此考虑如下的代码:
string s = "hello";
const char *pch = s.c_str();
s = "world";
此时pch则是指向字符串“world”的指针
若想一直使用执行完c_str()返回的数组,最好执行拷贝