相关疑难解决方法(0)

为什么不能简单地初始化(带括号)2D std :: array?

可能重复:
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)

c++ stl initialization c++11

31
推荐指数
1
解决办法
2万
查看次数

在外部声明一个数组并使用初始化列表进行初始化

我在初始化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)

我收到错误"表达式必须是可修改的左值"

谢谢.

c++ multidimensional-array

0
推荐指数
1
解决办法
55
查看次数

在c ++中分配大小为10000 10000 3的3维向量

我正在制作一个图片编辑程序,我一直在分配内存.我不知道发生了什么事.

好的..所以当我这样做时:

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++

0
推荐指数
1
解决办法
104
查看次数

C#中的数组结构是什么,但C/C++/Java中没有?

我正在准备考试,这个问题我找不到答案.阅读一堆文章,我发现最接近

C#中的数组有三种形式:一维,多维矩形数组(如C++多维数组)和锯齿状数组(数组数组).

所以这表明C++中没有锯齿状数组,但它存在于Java中.另一件事是只有C#可以有非零数组下限(如[-1,3]或[4,9].它会被认为是不同的数组结构吗?

c c# c++ java array-difference

-2
推荐指数
1
解决办法
483
查看次数