命名空间的using声明
在头文件中一般不使用using,避免影响名称空间。
string
初始化string的方式
string的操作
string::size_type
string 比较大小
字符串相加
与Java不同,c++里面字符串字面值不是string对象,所以有以下规则
处理string的字符
遍历
// 可以改变s的字符
for (auto& c : s) {
c = 'w';
}
// 改变不了s的字符
for (auto c : s) {
c = 'w';
}
vector
初始化
添加元素 push_back()
如果使用范围for循环,则不能使用push_back(),因为他会改变v.end()的位置
vector<int> v;
...
for(auto i : v){
v.push_back(xxx); // 不可以这样
}
其他操作
不能通过下标的方式添加元素
迭代器
auto a = v.begin(); // 返回指向第一个元素的迭代器
auto b = v.end(); // 返回指向尾元素下一个位置的迭代器
当容器为空时,它两都指向同一个位置:尾迭代器
const_iterator
auto a = v.cbegin(); // 返回指向第一个元素的常量迭代器
auto b = v.cend(); // 返回指向尾元素下一个位置的常量迭代器
这两个迭代器,返回的类型都是const_iterator,即不可以通过它改变容器的值
(*it).empty() 和 it->empty()
两者效果一样,但是后者更易写(*it).empty()
的()不可以省略,这是运算优先级的原因。
迭代器运算
数组
数组的大小不变,不可以任意向其中增加元素
定义和初始化
字符串数组
不允许拷贝和赋值
复杂的数组声明
int main() {
int a[2] = { 1,231};
int(*p)[2] = &a;
int* q = a;
cout << *(*(p)+1); // 231
cout << (*p)[1]; // 231
cout<< *(q+1); // 231
}