St.*_*rio 1 c++ iterator vector
我写了以下简单的例子:
#include<iostream>
#include<vector>
int main()
{
int arr[] = {1, 2, 4, 7, 10};
std::vector<int> vect;
vect.assign(arr, arr + 5);
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
std::cout << "-------------------------------------" << std::endl;
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
并且两个循环打印相同。我的问题是它可靠吗?迭代向量是否每次都以相同的顺序返回元素?我的意思是,它是标准化的还是允许某些实现以不同的顺序迭代向量。例如,我们第一次迭代向量如下:
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
并获得输出
1
2
4
7
10
Run Code Online (Sandbox Code Playgroud)
同时,第二次迭代产生输出:
2
10
1
4
7
Run Code Online (Sandbox Code Playgroud)
这可能用于某些实现吗?
是的,它是可靠的。
向量是一个“序列容器”,这意味着它的排序是确定性的。您选择容器中元素的顺序,这就是您在迭代时从中得到的顺序。总是。
从这个意义上说,这完全类似于在数组中向前走。
有趣的是,即使是关联容器也有可靠的迭代顺序;即使元素排序是由使用比较器(您可以指定,如果不指定,则为 )的算法执行的,std::less而不是简单地根据您附加元素的顺序。
您始终可以合理化标准容器的迭代顺序。