[英]Correct way to work with vector of arrays
有人能說出使用數組向量的正確方法是什么嗎?
我聲明了一個數組vector<float[4]>
( vector<float[4]>
),但出現error: conversion from 'int' to non-scalar type 'float [4]' requested
嘗試resize
時error: conversion from 'int' to non-scalar type 'float [4]' requested
。 出了什么問題?
您不能將數組存儲在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>>
詹姆斯麥克內利斯建議。
向量的每個元素都是float[4]
,因此當您調整大小時,每個元素都需要從float[4]
進行默認初始化。 我認為您嘗試使用像0
這樣的int
值進行初始化?
嘗試:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.