有人可以告诉使用数组向量的正确方法是什么吗?
我声明了一个数组向量 ( vector<float[4]>
) 但error: conversion from 'int' to non-scalar type 'float [4]' requested
在尝试时得到了resize
它。出了什么问题?
您不能将数组存储在vector
容器或任何其他容器中。要存储在容器中的元素的类型(称为容器的值类型)必须是可复制构造和可赋值的。数组都不是。
但是,您可以使用array
类模板,例如 Boost、TR1 和 C++0x 提供的模板:
std::vector<std::array<double, 4> >
(您需要替换std::array
为std::tr1::array
使用 C++ TR1 中包含的模板,或者boost::array
使用Boost 库中的模板。或者,您可以编写自己的;这非常简单。)
利用:
vector<vector<float>> vecArray; //both dimensions are open!
以下代码没有错误:
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>>
詹姆斯麦克内利斯建议。
矢量的每个元素都是 a float[4]
,因此当您调整每个元素的大小时,需要默认从 a 初始化float[4]
。我认为您尝试使用int
类似的值进行初始化0
?
尝试:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);