c++ - 如何使用为构造函数指定的大小来初始化 C++ 中的数组?

标签 c++ arrays multidimensional-array stdvector

我有一个 C++ 类,其成员应该是二维数组。我想将我的数组声明为类的头文件中的成员。然后在我的类的构造函数中,我想用一个大小(给构造函数)初始化我的数组并用零填充它。

我有一个我想要的 java 工作示例:

class Obj {
    int[][] array;
    public Obj(int sizex, int sizey) {
        array = new int[sizex][sizey];
    }
}

public class Main
{
    public static void main(String[] args) {
        Obj o = new Obj(12,20);
    }
}

我不想弄乱指针或 alloc() 和 free()。由于我的类基本上应该是该数组的包装器,因此我想保持简单。

我考虑过使用 std::vector,但由于数组在初始化后永远不会调整大小,我觉得 vector 有点强大......有没有比这更好的方法:?

#include<vector>

class Obj {
    std::vector<std::vector<int>> array;
    public:
    Obj(int xsize, int ysize) {
        std::vector<std::vector<int>> newArray(xsize, std::vector<int>(ysize, 0));
        array = newArray;
    }
};

int main()
{
    Obj o(12,20);
}

最佳答案

std::vector 是这里的最佳匹配。 (正如您所说,在大多数情况下可以避免原始数组和指针。另请参阅 How can I efficiently select a Standard Library container in C++11? )

并且可以直接在 member initializer list 中初始化数据成员而不是在默认初始化后在构造函数主体中赋值,例如

Obj(int xsize, int ysize) : array(xsize, std::vector<int>(ysize, 0)) {
}

关于c++ - 如何使用为构造函数指定的大小来初始化 C++ 中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69191069/

相关文章:

c++ - 二次公式 c++ - 用户定义的函数

更改包含结构打印的数组的值

javascript - 使用 Google Apps 脚本从数组中获取最后一个值

python - 二维列表行中的最后一个元素没有改变

c++ - 命名空间语法 "::Foo"

c++ - 如何解决库间包含依赖关系?

c++ - 数组是通过引用传递的,但是如果我只传递一个没有存储在内存中的数组的值会怎样?

C:检查数组是否包含相等的连续元素

javascript - 多维数组 Javascript

c++ - 重载运算符 C++ : Why is denominator being multiplied by 10