C++vector迭代器
时间: 2024-12-26 22:24:53 浏览: 2
### C++ 中 `vector` 容器的迭代器使用方法
在 C++ 中,`vector` 的迭代器提供了遍历和修改容器内元素的能力。由于 `vector` 是连续内存存储结构,其迭代器支持随机访问特性。
#### 创建与初始化向量及其迭代器
可以创建一个整数类型的 `vector` 并填充一些初始数据:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main(){
// 初始化一个含有四个元素{1, 2, 3, 4}的vector对象v
int a[] = {1, 2, 3, 4};
vector<int> v(a, a + sizeof(a)/sizeof(int));
}
```
#### 遍历向量中的元素
利用迭代器来逐一遍历并打印出所有的元素:
```cpp
// 获取起始和结束迭代器
for (vector<int>::iterator it=v.begin(); it!=v.end();++it){
cout << *it << " ";
}
cout << endl;
```
上述代码会输出:`1 2 3 4`[^2]
#### 插入新元素到向量末尾
可以通过调用成员函数 `push_back()` 向 `vector` 尾部追加单个元素;对于批量插入,则可考虑其他方式如 `insert()` 函数。
```cpp
// 添加一个新的值到最后面
v.push_back(5);
```
此时再次执行上面的循环语句将会得到如下结果:`1 2 3 4 5`
需要注意的是,在某些情况下(比如当容量不足时),这些操作可能会触发重新分配更大的内部数组,并使现有的所有迭代器都变得无效。因此建议先检查是否有足够的预留空间(`reserve`) 或者是在完成一系列增删改查之后再继续使用旧有的迭代器。
#### 删除指定位置上的元素
要移除特定索引处的一个项目,应该采用 erase 方法传入相应的迭代器参数。但是要注意一旦进行了这样的变更动作后,该迭代器就不再有效了,尝试对其进行解引用或其他形式的操作都将引发未定义行为。
```cpp
// 查找数值为3的位置
vector<int>::iterator pos=find(v.begin(), v.end(), 3);
if(pos != v.end()){
// 成功找到则删除此条目
v.erase(pos);
}else{
cerr<<"Not found!"<<endl;
}
try {
cout << *pos << endl; // 不安全的做法,因为pos已经失效
}catch(...){
cerr << "Iterator has been invalidated." << endl;
}
```
这段代码试图输出已被删除掉的那个位置的内容,但实际上这会导致运行错误,因为它违反了之前提到的安全准则——即不应该对已知失效后的迭代器做任何处理[^1]。
阅读全文