gpt4 book ai didi

c++ - 标准是否保证了 vector 元素的初始化顺序?

转载 作者:行者123 更新时间:2023-12-03 10:03:31 24 4
gpt4 key购买 nike

填写 std::vector<struct_name>来自 std::cin ,我通常写如下代码:

struct point{
int x, y;
};

int main()
{
std::size_t n;
std::cin>>n;
std::vector<point> vec(n);
for (auto& p:vec)
std::cin>>p.x>>p.y;
//...
}
但是今天我发现了另一种使用默认构造函数的方法:
struct point{
int x, y;
point(){
std::cin>>x>>y;
}
};

int main()
{
std::size_t n;
std::cin>>n;
std::vector<point> vec(n);
//...
}
问题 :
  • vector 元素的初始化顺序是否由标准(0,1,2,n-1...)保证?
  • (如果上一个问题的答案是正确的)第二个变体真的有两次有效吗?

  • 我对根据 C++11(和更新的)标准的行为感兴趣

    最佳答案

    不能保证元素按其索引的顺序进行初始化。在 C++11 中,请参阅 [vector.cons]/3:

    Effects: Constructs a vector with n value-initialized elements.


    这对排序没有任何说明,因此不能假设任何内容。该标准的后续版本中的措辞发生了变化,但似乎从未强加过任何顺序。

    关于c++ - 标准是否保证了 vector 元素的初始化顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65282509/

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