1 位于头文件的代码一般来说不应该使用using声明。头文件的内容会拷贝到所有引用它的文件中,如果头文件里有using声明,那么每个使用该头文件的文件就都会有这个声明。
2 读入一整行的函数:
string mystring;
while (getline(cin , mystring)){
cout<<mystring<<endl;
}
3 对于string类的输入函数,它会自动忽略开头的空白(空格、制表符、换行等等),从第一个真正的字符开始直到下一个空白。
对于getline()函数,它会保存字符串中的空白符,它读入数据,直到遇到换行符位置
const string s = "keep out!";
for (auto &c:s) {
cout << c << endl;
}
C的类型是const char&;
4 vector对象集合初始化:
vector<int> ivec;
vector<int> ivec2(ivec);
vector<int> ivec3=ivec;
//vector<string> svec(ivec);类型不匹配
vector<string> v1{"a","an","the"};
//vector<string> v1("a","an","the");
vector<int> ivec4(10,-1);
5 使用vector注意事项:
1:引用不可以成为vector的元素,因为其不是对象。
2:可以用花括号初始化每一个值。
3:可以用括号指定元素个数或相同的元素值。
4:只能使用直接初始化,不可以使用拷贝初始化(vector之间的拷贝是可行的,但要保证类型相同)
vector<int> ivec5;
ivec5[0]=42;
不合法,空vector,给第一个元素赋值是错误的。
6 迭代器
vector<int>::iterator it;
string::iterator it2;
vector<int>::const_iterator it3; //只能读
string::const_iterator it4;
7 数组问题
int a[]={0,1,2};
//int a2[]=a; 不允许使用一个数组初始化另一个数组
//a2=a;
8 复杂的数组
//int &refs[10]=/*?*/; 不存在引用的数组
int (*Parray)[3]=&a; //Parray指向一个含有3个整数的数组
int (&arrRef)[3]=a; //引用一个含有3个整数的数组
int *(&arry)[10]=ptrs; //arry是数组的引用,改数组含有10个指针
9 C标准库String函数
strlen(p) 返回p的长度,空字符不计算在内
strcmp(p1,p2) 比较p1和p2的相等性
strcat(p1,p2)将p2附加到p1之后返回p1
Strcpy(p1,p2)将p2拷贝给p1,返回p1
10 C风格字符串
string s5("hello world");
//char *str=s5;不能用string对象初始化char*
const char *str1=s.c_str();