1.C++中三个迭代器
在vector中,迭代器是很重要的存在,所以我们需要了解迭代器
三种迭代器分别为
1.普通迭代器,直接是vector< >::iterator it = v.begin();
相应代码如下(用迭代器遍历vector)
vector<int>::iterator it1 = v1.begin();
while (it1 != v1.end())
{
cout << *it1 << endl;
++it1;
}
2.const迭代器,这种是不能进行修改的迭代器
vector<int>::const_iterator it2 = v2.begin();
while (it2 != v2.end())
{
cout << *it2 << endl;
++it2;
}
想对vector中的数据进行修改时,编译器会报错
3.逆向迭代器
vector<int>::reverse_iterator it3 = v3.rbegin();
while (it3 != v3.rend())
{
cout << *it3 << endl;
++it3;
}
对于这种迭代器,就如字面意思,从后往前。具体不多说
2.C++中的erase
erase是一个删除数据的函数,它可以在vector中找到一个位置进行删除该数据。同时返回他的迭代器。
vector<int> v5;
v5.push_back(6);
v5.push_back(7);
v5.push_back(18);
v5.push_back(199);
v5.push_back(54342);
vector<int>::iterator pos = find(v5.begin(), v5.end(), 19);
if (pos != v5.end())
{
v5.erase(pos);
}
for (auto e : v5)
{
cout << e << " ";
}
cout << endl;
3.C++中迭代器失效
迭代器失效的原因可能是编译器报错,比如错误在vs中会报错,但是在GCC中不会报错,但是GCC会运行出错误的结果,接下来有一个简单示例。
vector<int> v7;
v7.push_back(1);
v7.push_back(2);
v7.push_back(3);
v7.push_back(4);
vector<int>::iterator it7 = v7.begin();
v7.push_back(5);
v7.push_back(6);
v7.push_back(7);
//以下情况迭代器失效
//原因是当it7走到2时,就进行了erase,所以这时it已经指向了3,但是vs编译器检查严格,就进行了报错,但是在GCC编译器下不会进行报错,但会计算错误
while (it7 != v7.end())
{
if (*it7 % 2 == 0)
{
v7.erase(it7);
}
++ * it7;
}
for (auto e : v7)
{
cout << e << " ";
}
cout << endl;
4.C++中的sort快排
sort快排是库函数algorithm的一个函数,用于快速排列数据。
//sort 快排
vector<int> v6;
v6.push_back(6);
v6.push_back(3);
v6.push_back(1);
v6.push_back(9);
v6.push_back(54342);
sort(v6.begin(), v6.end());
for (auto e : v6)
{
cout << e << " ";
}
cout << endl;