可能重复:
c ++为什么std :: vector和std :: array的initializer_list行为不同
我定义了简单的2D数组(3X2):
std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};
Run Code Online (Sandbox Code Playgroud)
我很惊讶这个初始化不起作用,用gcc4.5错误: too many initializers for 'std::array<std::array<int, 3u>, 2u>'
为什么我不能使用这种语法?
我找到了解决方法,一个非常有趣的额外括号,但只是想知道为什么第一个,最简单的方法是无效的?
解决方法:
// EXTRA BRACES
std::array<std::array<int,3>,2> a {{
{1,2,3},
{4,5,6}
}};
// EXPLICIT CASTING
std::array<std::array<int,3>,2> a {
std::array<int,3>{1,2,3},
std::array<int,3>{4,5,6}
};
Run Code Online (Sandbox Code Playgroud)
[UPDATE]
好的,感谢KerrekSB和评论,我得到了不同.所以在我的例子中似乎有太少的括号,就像在这个C例子中一样:
struct B {
int array[3];
};
struct A {
B array[2];
};
B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};
Run Code Online (Sandbox Code Playgroud) 我在初始化2D int数组时遇到问题.我的程序结构是:
int arr[2][2];
if(val==1)
arr = {{1,1}, {2,2}};
else if (val==2)
arr = {{3,3}, {4,4}};
...
...
int x = arr[1][1];
...
Run Code Online (Sandbox Code Playgroud)
我收到错误"表达式必须是可修改的左值"
谢谢.
我正在制作一个图片编辑程序,我一直在分配内存.我不知道发生了什么事.
好的..所以当我这样做时:
std::vector<unsigned char> h;
for (int a = 0; a < 10000 * 10000 * 3; a++) {
h.push_back(0);
}
Run Code Online (Sandbox Code Playgroud)
这很好(对不起我不得不),但当我这样做时:
std::vector<std::vector<std::vector<unsigned char>>> h;
for (uint32_t a = 0; a < 10000; a++) {
h.push_back({});
for (uint32_t b = 0; b < 10000; b++) {
h.at(a).push_back({});
for (uint32_t c = 0; c < 3; c++) {
h.at(a).at(b).push_back(0xff);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的内存使用情况爆炸,我收到错误:Microsoft C++异常:std :: bad_alloc在内存位置0x009CF51C
我正在使用.bmp.
目前,代码处于测试模式,所以它基本上是一个巨大的混乱...我15岁,所以不要指望我.
我正在寻找解决方案,但我发现的只是如何处理大整数等等......
如果你可以给我另一种解决方案,但我希望我的代码能够像初学者一样友好.
我正在准备考试,这个问题我找不到答案.阅读一堆文章,我发现最接近
C#中的数组有三种形式:一维,多维矩形数组(如C++多维数组)和锯齿状数组(数组数组).
所以这表明C++中没有锯齿状数组,但它存在于Java中.另一件事是只有C#可以有非零数组下限(如[-1,3]或[4,9].它会被认为是不同的数组结构吗?