码:
std::vector<int> x{1,2,3,4};
std::array<int, 4> y{{1,2,3,4}};
Run Code Online (Sandbox Code Playgroud)
为什么我需要std :: array的双花括号?
在C++中,如何创建多维std::array?我试过这个:
std::array<std::array<int, 3>, 3> arr = {{5, 8, 2}, {8, 3, 1}, {5, 3, 9}};
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我做错了什么,如何解决这个问题?
要使用 std::vector 创建二维数组,您可以
vector<vector<int>> array2d = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
Run Code Online (Sandbox Code Playgroud)
外层 {} 代表外层向量;内部 {},内部向量。
但是,要使用 std::array 创建二维数组,您需要执行以下操作
array<array<int,4>, 3> array2d = {{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}}};
Run Code Online (Sandbox Code Playgroud)
为什么 std::array 的 std::array 需要一对额外的封闭 {}?
有人可以帮助我理解为什么我的编译器不能/不推断这个?(使用g ++ 7.3)
不起作用:
#include <array>
std::array<std::array<double,2>,2> f() {
return {{0,0},{0,0}};
}
Run Code Online (Sandbox Code Playgroud)
工作良好:
#include <array>
std::array<std::array<double,2>,2> f() {
return {std::array<double,2>{0,0},{0,0}};
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这也失败了:
#include <array>
std::array<std::array<double,2>,2> f() {
return std::array<std::array<double,2>,2>{{0,0},{0,0}};
}
Run Code Online (Sandbox Code Playgroud)
@ 1201ProgramAlarm指出添加另一组花括号有效:
#include <array>
std::array<std::array<double,2>,2> f() {
return {{{0,0},{0,0}}};
}
Run Code Online (Sandbox Code Playgroud)
它使用聚合初始化,因为std::array没有用于brace-init-list的构造函数.那没关系,但那么为什么/如何运作?
std::array<double,2> x{1,2};
Run Code Online (Sandbox Code Playgroud)
为什么它处理这种情况但不处理嵌套的情况?
我不明白为什么这里说“太多初始化程序”
#include <iostream>
#include <array>
typedef std::array<std::array<double, 3>, 3> matrix;
int main()
{
matrix mat = {
{ 1.0, 0.0, 472.3672 },
{ 1.0, 0.0, 472.3672 },
{ 1.0, 0.0, 472.3672 }
};
}
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
我想使用 2d std::array 因为我必须在程序中的某个点使用绑定检查。对于一维数组,我会这样做:
#include <iostream>
#include <array>
int main (){
std::array<int,4> myarray;
for (int i=0; i<10; i++){
myarray.at(i) = i+1;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何为二维数组做到这一点。我可以在其中使用 auto 吗?