gpt4 book ai didi

arrays - C++ - 用一个元素初始化数组向量

转载 作者:行者123 更新时间:2023-12-02 04:43:04 27 4
gpt4 key购买 nike

在 C++11 中,有没有一种好方法可以用一个元素初始化数组向量(我的意思是 C++ 类),例如

std::vector<std::vector<int> > foo(3, std::vector<int>(2, 1));

初始化一个全为 1 的 3x2 向量?

不幸的是,数组向量的类似物似乎不起作用;我真的必须使用 for 循环吗?

最佳答案

也许像这样?

#include <vector>
#include <array>
#include <iostream>

int main()
{
std::vector< std::array<int, 2> > v(3, {1,1});

for(auto const& e0 : v)
{
for(auto const& e1 : e0)
std::cout << e1 << ", ";
std::cout << "\n";
}
}

输出:

1, 1, 1, 1, 1, 1,

"Why should we use two brackets?"

The original code in my question was

std::vector< std::array<int, 2> > v(3, {{1,1}});

但我决定去掉第二对大括号。他们一直在那里抑制 clang++ 警告:通常,std::array包含一个(原始)数组。一对大括号足以初始化这个内部数组,但 clang++ 会发出警告,因为 {1,1} 的元素(一对大括号)用于初始化此内部数组的元素,而不是聚合(外部 std::array )本身。引用 clang++ :

warning: suggest braces around initialization of subobject

我在标准中查找了这一点,它需要在 [array.overview]/2

An array is an aggregate (8.5.1) that can be initialized with the syntax

    array<T, N> a = { initializer-list };

where initializer-list is a comma-separated list of up to N elements whose types are convertible to T.

参数传递使用与这种形式的初始化相同的规范(称为复制初始化,[dcl.init]/15),因此保证使用一对大括号> 去工作。

OTOH,没有要求 std::array包含一个(原始)数组。

关于arrays - C++ - 用一个元素初始化数组向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19318482/

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