79

有人可以告诉使用数组向量的正确方法是什么吗?

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

4

4 回答 4

143

您不能将数组存储在vector容器或任何其他容器中。要存储在容器中的元素的类型(称为容器的值类型)必须是可复制构造和可赋值的。数组都不是。

但是,您可以使用array类模板,例如 Boost、TR1 和 C++0x 提供的模板:

std::vector<std::array<double, 4> >

(您需要替换std::arraystd::tr1::array使用 C++ TR1 中包含的模板,或者boost::array使用Boost 库中的模板。或者,您可以编写自己的;这非常简单。)

于 2011-01-06T06:18:55.960 回答
11

利用:

vector<vector<float>> vecArray; //both dimensions are open!
于 2011-01-06T06:15:58.130 回答
9

以下代码没有错误:

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>>

詹姆斯麦克内利斯建议。

于 2014-10-06T11:37:37.947 回答
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);
于 2011-01-06T06:17:03.740 回答