理解std :: vector

时间:2015-06-14 16:06:59

标签: c++ vector iterator

我写了以下简单的例子:

#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;
    }
}

DEMO

两个循环都打印相同。我的问题是它可靠吗?迭代迭代是否每次以相同的顺序返回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

这有可能实现吗?

2 个答案:

答案 0 :(得分:4)

是的,它可靠。

vector是一个&#34;序列容器&#34;,这意味着它的排序是确定性的。您可以选择容器中元素的顺序,以及迭代时从中获取的顺序。总是

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

在这个意义上,它完全类似于从阵列中向前走。

有趣的是,即使关联容器也有可靠的迭代顺序;即使元素排序是由算法使用比较器(你可以指定,如果你不是,它是std::less)而不是简单地通过凭借您追加元素的顺序。

您可以随时理解标准容器的迭代顺序。

答案 1 :(得分:3)

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

的元素的顺序相同