3

我正在尝试*vectorName使用 366 x 4 的 2D 向量初始化指针 ( )。

两个都

vector<int> *vectorName = new vector<int>(366, new vector<int>(4));

vector<int> *vectorName = new vector<int>(366, vector<int>(4));

不工作,给我错误

错误:没有构造函数实例“std::vector, <_Ty, _Alloc>::vector [with_ty=int, _Alloc=std_allocator]”参数类型为 (const int, std::vector>*)

我能做些什么?

这发生在 main 函数中。

4

3 回答 3

4
vector<int> *vectorName = new vector<int>(366, vector<int>(4));

以上不起作用,因为向量构造函数模板(忽略一些事情)如下所示:

vector <TYPE> (SIZE, variable of type TYPE);

而在 中vector<int>(366, vector<int>(4))vector <int> (4)不是类型int

要创建具有 366个大小为 4的svector元素的 a:vectorint

vector<vector<int> > *vectorName = new vector<vector<int> >(366, vector<int>(4));

或者,如果您不需要指针:(您很可能不需要)

vector<vector<int> > vectorName(366, vector<int>(4));

作为旁注,如果它是固定大小的 2D vector,你为什么使用vector,而不仅仅是一个数组。这会简单得多:

int arr[366][4];
于 2013-02-19T14:26:34.437 回答
2

我假设您正在尝试使用指向向量的指针来获取向量的动态 C 数组。没有理由这样做。您可以改用向量的向量:

vector< vector<int> >

您可以像这样初始化它:

vector< vector<int> > vec(4);

for (size_t i = 0; i < 4; ++i) {
    vec[i].resize(366);
}

使用示例:

vec[3][365] = 3;

但是,如果您确实需要指向此类向量的指针:

vector< vector<int> >* vec = new vector< vector<int> >(4);

for (size_t i = 0; i < 4; ++i) {
    (*vec)[i].resize(366);
}

(*vec)[3][365] = 3;

如果您的大小是恒定的并且您使用的是 C++11 编译器,则可以使用更简单的方法std::array

array<array<int, 366>, 4> arr;

// Usage example
arr[3][365] = 3;

或指向动态分配的指针:

array<array<int, 366>, 4>* arr = new array<array<int, 366>, 4>;

// Usage example
(*arr)[3][365] = 3;
于 2013-02-19T14:49:31.773 回答
0

你想这样做吗?这会生成一个带有 int 的向量的 2D 向量。它使用大小为 4 的向量创建 366 个向量,其中所有项目都初始化为零。现在你有一个 366 x 4 的二维向量。

vector<vector<int> > twod( 366, vector<int>(4,0));

如果你想要一个指向这个向量的指针:

vector<vector<int> >* twodptr = &twod;

如果你真的需要这个。

于 2013-02-19T14:49:54.957 回答