命名空间声明
using namespace::name;
头文件中的代码不应该使用using声明,因为每个头文件的内容会拷贝到所有引用他的文件中去,如果头文件中有声明,那么每个程序都会有这个声明,可能会产生某些冲突。
string
初始化字符串的方式
1.string s1;//默认初始化为空串
2.string s2(s1);
3.string s2=s1;
4.string s3("value");
5.string s3="value";
6.string s4(n,'c');//把s4初始为由n个字符c组成的串
注意:string默认含有一个无参构造函数,会将字符串初始化为一个空串。
拷贝初始化:是指使用等号(=)初始化一个变量,例如上面的3,5
直接初始化:不使用等号(=)初始化的方式叫做直接初始化,例如2,4,6
getline
getline(is,s)是指从is中读取一行赋给s,并返回is.
getline遇到换行符停止读入。
size函数
size函数返回一个string对象的长度。他的函数返回类型值是string::size_type类型的值,是一个无符号类型的值,可以放下任何string对象的大小。
字符串相加
允许对string对象使用加法运算符(+)。
当string对象和字符字面值及字符串字面值混在一条语句中时,必须确保每个加法运算符的两侧的对象至少有一个string对象。
string s1;
string s6=s1+","+"ww";//正确
string s7=","+"ww"+s1;//错误
s6的工作机制和连续输入连续输出一样,s1+","的结果是一个string对象。
vector
初始化
1.vector<T> v1;
2.vector<T> v2(v1);
3.vector<T> v2=v1;
4.vector<T> v3=(n,val);
5.vector<T> v4(n);
6.vector<T> v5{a,b,c,d...};
7.vector<T> v5={a,b,c,d...};
在初始化的过程中,如果使用的是圆括号,就是用来构造vector对象的,例如v4就说明vector对象的容量。
如果是花括号,可以认为是列表初始化。但是如果初始化使用了花括号,但提供的值又不能列表初始化,可以考虑用这样的值构造vector对象,例:
vector<string> v7{10};//v7有十个默认初始化的元素
vector<string> v8{10,"hi"};//v8有10个值为”hi"的元素
使用数组为vector赋值时,指明拷贝区域的首元素地址和尾后地址即可。
vector<int> v(begin(arr),end(arr));
vector<int> v1(arr+1,arr+ 4);//拷贝三个元素给v1
数组
定义数组时必须指定数组的类型,不允许使用auto关键字由初始值列表推断数据类型。
数组的元素应为对象,所以不存在引用的数组。
数组的下标应该大于等于0而小于数组的大小。
对数组元素使用取地址符就会得到指向该元素的指针,在很多用到数组名字的地方,编译器会自动将其替换为一个指向数组首元素的指针。
string *p2=nums;//等价于p2=&nums[0]
当使用数组作为一个auto变量的初始值时,推断得到的类型是一个指针。
当使用decltype关键字时不会发生数组向指针的转换,decltype(ia)返回的类型是由10个整数的数组。
c风格字符串
c风格字符串是一种书写习惯,此书写习惯将字符串放在字符数组中并以空字符结束('\0\)。
c风格字符串函数
strlen(p)
strcmp(p1,p2)
strcat(p1,p2);将p2追加在p1后面
strcpy(p1,p2);
以上函数传入的参数必须是指向以空字符作为结束的数组。