如何在C++中不使用迭代器遍历Vector
迭代器不是遍历任何STL容器的唯一方式。有一种更好、更有效的方法可以在不使用迭代器的情况下通过容器中存储的值遍历向量。以下是向量的相同语法:
语法:
for(auto itr : vector_name)
解释: 这里 itr 是存储在向量中用于遍历向量的值。下面的程序说明了相同的内容:
//C++程序说明了如上面所述
//主题
#include <bits/stdc++.h>
using namespace std;
//驱动程序代码
int main()
{
//声明向量
vector<int> arr = { 1, 2, 3, 4 };
//使用值直接遍历向量
for (auto& it : arr) {
//打印值
cout << it << ' ';
}
return 0;
}
1 2 3 4
更新向量中的值: 要更新向量中的值而不使用迭代器,请使用引用遍历向量中存储的值并更新该值。以下是相同内容的语法:
语法:
for(auto &itr : vector_name)
解释: 这里 itr 是存储在向量中用于遍历向量的值的地址。下面的程序说明了相同内容:
//C++程序说明了在不使用迭代器的情况下更新向量中的值
#include <bits/stdc++.h>
using namespace std;
//更新向量中的值的函数
void updateVector(vector<int> arr)
{
cout << "更新前的向量: ";
for (auto& it : arr) {
cout << it << ' ';
}
//使用值的引用遍历
//每个值乘以2
for (auto& it : arr) {
it *= 2;
}
cout << "\n更新后的向量: ";
//打印向量元素
for (auto& it : arr) {
cout << it << ' ';
}
}
// 驱动程序代码
int main()
{
//声名向量
vector<int> arr = { 1, 2, 3, 4 };
//调用函数
updateVector(arr);
return 0;
}
更新前的向量: 1 2 3 4
更新后的向量: 2 4 6 8
优点:
- 编写代码简单易懂。
- 比使用迭代器方法更好、更有效。
缺点:
- 它仅向前迭代。
- 不保留计数器,即我们不能使用该遍历方式找到任何元素的索引。为了计算元素,必须显式地取出计数器。
我们还可以使用相同的遍历方式在C++中遍历很多不同的容器。以下是相同内容的说明:
- Map:
//C++程序,演示在不使用迭代器的情况下Map的迭代
#include <bits/stdc++.h>
using namespace std;
// 主程序
int main()
{
// 定义Map
map<int, int> Mp;
// 将值插入Map
Mp[1] = 1;
Mp[2] = 2;
Mp[3] = 3;
// 使用Map中的值来进行迭代
for (auto it : Mp) {
// 输出元素
cout << it.first << ' '
<< it.second << endl;
}
return 0;
}
输出:
1 1
2 2
3 3
- Map of Vectors:
//C++程序,演示在不使用迭代器的情况下Map of vectors的迭代
#include <bits/stdc++.h>
using namespace std;
// 主程序
int main()
{
// 定义Map of vectors
map<int, vector<int> > Mp;
// 临时的vector
vector<int> temp = { 1, 2, 3 };
// 将值插入Map
Mp[1] = temp;
temp = { 2, 3, 8, 9 };
Mp[2] = temp;
temp = { 10, -2 };
Mp[3] = temp;
// 使用Map of vectors中的值来进行迭代
for (auto it : Mp) {
// 输出元素
cout << it.first << " -> ";
// 遍历Map中的每个vector,并打印元素
for (auto jt : it.second) {
cout << jt << ' ';
}
cout << endl;
}
return 0;
}
输出:
1 -> 1 2 3
2 -> 2 3 8 9
3 -> 10 -2
- Set:
//C++程序,演示在不使用迭代器的情况下set的迭代
#include <bits/stdc++.h>
using namespace std;
// 主程序
int main()
{
// 定义set
set<int> S;
// 将值插入set
S.insert(3);
S.insert(-1);
S.insert(3);
S.insert(4);
// 使用set中的值来进行迭代
for (auto it : S) {
// 输出元素
cout << it << ' ';
}
return 0;
}
输出:
-1 3 4
- Deque:
//C++程序,演示在不使用迭代器的情况下deque的迭代
#include <bits/stdc++.h>
using namespace std;
// 主程序
int main()
{
// 定义deque deque<int> dq;
// 将值插入deque
dq.push_front(1);
dq.push_front(2);
dq.push_front(3);
dq.push_back(4);
dq.push_back(5);
// 使用deque中的值来进行迭代
for (auto it : dq) {
// 输出元素
cout << it << ' ';
}
return 0;
}
输出:
3 2 1 4 5