迭代器是什么? 用来访问容器的一个桥梁
队列和栈没有迭代器
正向迭代器
容器类名::iterator 迭代器名;
std::vector<int> data2 = {1,2,3,4,5,6,7};
std::vector<int>::iterator hh;
hh = data2.begin();
//一般都自动类型推断,推荐下面的写法
auto hh = data2.begin();
while (hh != data2.end()) {
std::cout << *hh << " ";
hh++;
}
2.非const对象的反向迭代器
std::vector<int>::reverse_iterator rit = data2.rbegin();
while (rit != data2.rend()) {
std::cout << *rit << " ";
++rit;
}
3.const对象的正向迭代器与const对象的反向迭代器
void print_vector(const vector<int>& v) {//在实际过程中一般不直接使用const 定义对象
//一般和引用&用于传参中,引用提高效率,const防止改变对象
//const对象的正向迭代
vector<int>::const_iterator it = v.begin();
while (it != v.end()) {
cout << *it << " ";
++it;
}
cout << endl;
//const对象的反向迭代
vector<int>::const_reverse_iterator rit = v.rbegin();
while (rit != v.rend()) {
cout << *rit << " ";
rit++;
}
cout << endl;
}
三种遍历方法
1.for+下标遍历
for (size_t i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
2.for+auto遍历
for (auto e : v) {//也可以写成auto& e可修改v里的内容
cout << e << " ";
}
cout << endl;
3.迭代器遍历
for (auto e : v) {//也可以写成auto& e可修改v里的内容
cout << e << " ";
}
cout << endl;
迭代器的辅助函数:std::advance(hh, 2);
相当于C里面的p+i
std::vector<int> data2 = {1,2,3,4,5,6,7};
std::vector<int>::iterator hh;
hh = data2.begin();
//一般都自动类型推断,推荐下面的写法
//auto hh = data2.begin();
std::advance(hh, 2);
while (hh != data2.end()) {
std::cout << *hh << " ";
hh++;
}
std::iter_swap(data2.begin(), data2.end() - 1); //7和1交换 第一个和最后一个交换
std::vector<int> data2 = {1,2,3,4,5,6,7};
std::vector<int>::iterator hh;
hh = data2.begin();
//一般都自动类型推断,推荐下面的写法
//auto hh = data2.begin();
//std::advance(hh, 2);
std::iter_swap(data2.begin(), data2.end() - 1); //7和1交换 第一个和最后一个交换
while (hh != data2.end()) {
std::cout << *hh << " ";
hh++;
}
STL查找算法排序算法真多,工作中看到用用就行,和查字典一样留个印象