指向多维向量的指针

时间:2013-02-19 14:03:08

标签: c++

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

两个

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

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

不起作用并给我错误

  

错误:没有构造函数的实例“std :: vector,&lt; _Ty,_Alloc&gt; :: vector [with_ty = int,_Alloc = std_allocator]”   参数类型是(const int,std :: vector&gt; *)

我该怎么办?

这发生在主要功能中。

3 个答案:

答案 0 :(得分:4)

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

以上操作不起作用,因为 vector constructor模板(忽略了一些内容)如下所示:

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

vector<int>(366, vector<int>(4))中,vector <int> (4)不属于int类型。

要创建一个vector,其中包含vectorint大小为4的366个元素:

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];

答案 1 :(得分: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;

答案 2 :(得分:0)

你正试图这样做吗?这使得带有int的向量的2D向量。它使用大小为4的向量创建366个向量,其中所有项目都初始化为零。现在你有一个366乘4的2D矢量。

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

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

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

如果你真的需要这个。