我正在尝试用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; *)
我该怎么办?
这发生在主要功能中。
答案 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
,其中包含vector
个int
大小为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)
vector<vector<int> > twod( 366, vector<int>(4,0));
如果你想要一个指向这个向量的指针:
vector<vector<int> >* twodptr = &twod;
如果你真的需要这个。