有人能说出使用数组向量的正确方法是什么吗?
我声明了一个数组向量(vector<float[4]>
)但在尝试error: conversion from 'int' to non-scalar type 'float [4]' requested
时得到了resize
。出了什么问题?
答案 0 :(得分:109)
您无法将数组存储在vector
或任何其他容器中。要存储在容器中的元素类型(称为容器的值类型)必须是可复制构造和可分配的。数组都不是。
但是,您可以使用array
类模板,如Boost,TR1和C ++ 0x提供的模板:
std::vector<std::array<double, 4> >
(您需要将std::array
替换为std::tr1::array
以使用C ++ TR1中包含的模板,或boost::array
使用the template from the Boost libraries。或者,您可以编写拥有;这很简单。)
答案 1 :(得分:8)
使用:
vector<vector<float>> vecArray; //both dimensions are open!
答案 2 :(得分:8)
以下代码中没有错误:
float arr[4];
arr[0] = 6.28;
arr[1] = 2.50;
arr[2] = 9.73;
arr[3] = 4.364;
std::vector<float*> vec = std::vector<float*>();
vec.push_back(arr);
float* ptr = vec.front();
for (int i = 0; i < 3; i++)
printf("%g\n", ptr[i]);
输出为
6.28
2.5
9.73
4.364
结论:
std::vector<double*>
除了
之外是另一种可能性std::vector<std::array<double, 4>>
James McNellis建议。
答案 3 :(得分:5)
向量的每个元素都是float[4]
,因此当您调整每个元素的大小时,需要从float[4]
初始化默认值。我认为你尝试使用int
0
来初始化static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);
?
尝试:
{{1}}