Primer (五)

来源:互联网 发布:傲剑九阴真经数据 编辑:程序博客网 时间:2024/06/08 18:38

Vector

1. vector 是一种类模板。需要<vector> using std::vector 有两种初始化方法:

vector<int> v(10,0); // 10个0vector<int> v{10,0}; // 10和0vector<int> v(10); // 10个默认0vector<int> v{10}; // 10

2. 主要操作有v.empty() v.size() v[n] v.push_back()

v.size() 类型为 vector<int>::size_type

for (auto i:v) {    cout<<i; // 可以访问,不能改变}for (auto &i:v) {    i++; // &i引用才能改变vector元素}for (decltype(v.size()) i=0; i<v.size(); ++i) {    v[i] = i; // 错误,v为空时v[i]未知,不能用下标添加vector元素}for (decltype(v.size()) i=0; i<v.size(); ++i) {    v.push_back(i); // 正确,应该使用push_back}

3. 所有的容器类型以及string都支持迭代器,但只有少部分如vector容器以及string支持下标访问,所以尽量使用迭代器而非下标。

4. 迭代器的尾指针end()指向的是最后一个元素的后面一位,不能解引用以及移动位置。空容器的begin和end相等,都指向最后一个元素的后面一位。

5. 所有容器的迭代器都定义了!=和=,所以用!=判断迭代器位置而非<符号。

6. 迭代器有两种类型

vector<int>::iterator it; // 普通迭代器,可以修改元素vector<int>::const_iterator it; // 常量迭代器,只能读,不能写,常量容器只能用常量迭代器string::iterator it; // 同普通迭代器auto it = v.cbegin(); // it的类型为常量迭代器auto it = v.cend(); // it的类型为常量迭代器(*it).empty(); // it所指元素是否为空*it.empty(); // 错误,it是迭代器,不能判断emptyit->empty(); // 正确,->运算符是解引用和.的组合

7. 范围for和带有迭代器的循环体都不能改变容器的大小,只要容器大小改变了,范围for和迭代器都不起作用了。

8. 迭代器可以+n运算,两个迭代器之差的数据类型是vector<T> difference_type


原创粉丝点击