簡體   English   中英

使用數組向量的正確方法

[英]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嘗試resizeerror: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM