繁体   English   中英

了解std :: vector的迭代器行为

[英]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

这对于某些实施方式可能吗?

是的,很可靠。

向量是“序列容器”,这意味着其顺序是确定的。 您选择容器中元素的顺序,这就是您迭代时得到的顺序。 总是。

  • 您使用位于索引0索引N-1的元素填充矢量。
  • 向量的迭代器从索引0迭代到索引N-1

从这个意义上讲,这完全类似于向前遍历数组。

有趣的是,即使关联的容器也具有可靠的迭代顺序。 即使元素排序是通过算法使用比较器 (您可以指定,如果没有指定,则为std::less )执行的,而不是仅仅通过添加元素的顺序来执行。

您始终可以合理化标准容器的迭代顺序。

std::vector保证像数组一样连续的内存分配。 因此,始终保证使用迭代器访问向量的顺序与std::vector的元素相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM