vector_traverse
注意,cbegin(), cend(), crbegin(), crend() 方法是 c++11 方法 在遍历过程中删除数据需要移动迭代器,这里要注意,erase 参数是正像迭代器,所以不可以使用 reverse_iterator iterator erase (const_iterator position); iterator erase (const_iterator first, const_iterator last);
删除指定元素示例:
for(vector<int>::iterator it = v.begin(); it != v.end();)
{
if(*it == 3)
v.erase(it);
else
++it;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
以下是遍历 vector 的几种方法
- 使用 c 风格的遍历
for(int i = 0; i < v.size(); ++i)
cout<< v[i];
1
2
2
- 使用迭代器遍历
for(vector<T>::iterator it = v.begin(); it!= v.end(); ++it)
cout<<*it;
1
2
2
- 使用 const 迭代器遍历
for(vector<T>::const_iterator it = v.cbegin(); it != b.cend(); ++it)
cout<<*it;
1
2
2
- 使用 C++11 风格的遍历
for(auto& it:v)
cout<<it;
1
2
2
- 使用 lambda 表达式访问
for_each(v.begin(), v.end(), [](int & val)->void{cout<<val;);
1
6.使用 for_each 加函数访问
template<typename T>
void printer(const T&val)
{ cout<<val<<endl;}
for_each(v.cbegin(), v.cend(), printer<int>);
1
2
3
4
5
2
3
4
5
- 使用 for_each 加仿函数
template<typename T>
struct functor
{
void operator()(constT& obj)
{
cout<<obj<<endl;
}
}
for_each(v.cbegin(), v.cend(), functor<int>());
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
编辑 (opens new window)
上次更新: 2023/02/24, 10:34:03