gpt4 book ai didi

c++ - 了解迭代器对 std::vector 的行为

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:46 25 4
gpt4 key购买 nike

我写了下面这个简单的例子:

#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

并且两个循环都打印相同的内容。我的问题是它可靠吗?迭代 vector 是否每次都以相同的顺序返回 elemtns?我的意思是,它是标准化的还是允许某些实现以不同的顺序迭代 vector 。例如,我们第一次迭代 vector 如下:

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

对于某些实现来说这可能吗?

最佳答案

是的,它很可靠。

vector 是一个“序列容器”,这意味着它的排序是确定的。您选择容器中元素的顺序,这就是您在迭代时从中得到的顺序。总是。

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

从这个意义上说,它完全类似于在数组中向前走。

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

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

关于c++ - 了解迭代器对 std::vector 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30831587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com