[英]Understanding iterator's behavior for std::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;
}
}
并且两个循环打印相同。 我的问题是可靠的吗? 遍历向量是否每次都以相同顺序返回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
这对于某些实施方式可能吗?
是的,很可靠。
向量是“序列容器”,这意味着其顺序是确定的。 您选择容器中元素的顺序,这就是您迭代时得到的顺序。 总是。
从这个意义上讲,这完全类似于向前遍历数组。
有趣的是,即使关联的容器也具有可靠的迭代顺序。 即使元素排序是通过算法使用比较器 (您可以指定,如果没有指定,则为std::less
)执行的,而不是仅仅通过添加元素的顺序来执行。
您始终可以合理化标准容器的迭代顺序。
std::vector
保证像数组一样连续的内存分配。 因此,始终保证使用迭代器访问向量的顺序与std::vector
的元素相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.