我写了以下简单的例子:
#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;
}
}
两个循环都打印相同。我的问题是它可靠吗?迭代迭代是否每次以相同的顺序返回elemtns?我的意思是,它是标准化的还是允许某些实现以不同的顺序迭代向量。例如,我们按照以下步骤迭代向量:
for(std::vector<int>::iterator it = vect.begin(); it != vect.end(); ++it)
{
std::cout << *it << std::endl;
}
并获取输出
1
2
4
7
10
同时,迭代第二次产生输出:
2
10
1
4
7
这有可能实现吗?
答案 0 :(得分:4)
是的,它可靠。
vector是一个&#34;序列容器&#34;,这意味着它的排序是确定性的。您可以选择容器中元素的顺序,以及迭代时从中获取的顺序。总是
在这个意义上,它完全类似于从阵列中向前走。
有趣的是,即使关联容器也有可靠的迭代顺序;即使元素排序是由算法使用比较器(你可以指定,如果你不是,它是std::less
)而不是简单地通过凭借您追加元素的顺序。
您可以随时理解标准容器的迭代顺序。
答案 1 :(得分:3)
std::vector
保证像数组一样连续的内存分配。因此,使用迭代器访问向量始终保证与std::vector