Primer (五)

Vector

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

vector<int> v(10,0); // 10个0
vector<int> v{10,0}; // 10和0
vector<int> v(10); // 10个默认0
vector<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是迭代器,不能判断empty
it->empty(); // 正确,->运算符是解引用和.的组合

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值