正确的方式来处理数组的向量
有人能告诉什么是正确的方式来处理数组的vector?
我声明了一个向量数组( vector<float[4]>
),但得到error: conversion from 'int' to non-scalar type 'float [4]' requested
时试图resize
它的resize
。 出了什么问题?
您不能将数组存储在vector
或任何其他容器中。 要存储在容器中的元素的types(称为容器的值types )必须既是可复制的,也是可分配的。 数组既不是。
但是,您可以使用array
类模板,如由Boost,TR1和C ++ 0x提供的模板:
std::vector<std::array<double, 4> >
(你需要用std::tr1::array
replacestd::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>>
詹姆斯·麦克奈利build议。
你的向量的每个元素都是一个float[4]
,所以当你调整每个元素的时候需要默认从一个float[4]
初始化。 我把它,你试图初始化一个int
值像0
?
尝试:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0}; myvector.resize(newsize, zeros);