正确的方式来处理数组的向量

有人能告诉什么是正确的方式来处理数组的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::arrayreplacestd::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);