使用数组向量的正确方法

时间:2011-01-06 06:11:21

标签: c++ arrays vector stdvector

有人能说出使用数组向量的正确方法是什么吗?

我声明了一个数组向量(vector<float[4]>)但在尝试error: conversion from 'int' to non-scalar type 'float [4]' requested时得到了resize。出了什么问题?

4 个答案:

答案 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}}