3D矢量 - "没有过载功能的实例?"

时间:2018-02-21 20:04:28

标签: c++ pointers vector push-back

对于C ++中的向量来说还是比较新的,这个函数的目的是获取4个参数,其中3个定义被写入数据的(x,y,z)位置,第4个是该值的值。写的。

as Requested,列出了错误图片:

this small plugin

问题出在" push_back"码。 "。"在yy.push和xx.push给出错误"没有重载函数的实例"。

如果有人能够解释这意味着什么,以及如何解决它,我将非常感激! :)

double datawrite(vector<unsigned int> xx, vector<unsigned int> yy, 
vector<unsigned int> zz, double val) {
//Writes data to the 3d Vector

//finds coordinates for data
    vector< vector< vector<unsigned int > > > xx;
    vector< vector<unsigned int> > yy;
    vector<unsigned int> zz;

//Writes value at proper position
    zz.push_back(val);
    yy.push_back(zz);
    xx.push_back(yy);

    //outputs value from vector
    return val;
}

1 个答案:

答案 0 :(得分:0)

所以你想要一个三维的双打矩阵?首先,您需要创建它:

#include <vector>
std::vector<vector<vector<double>>> matrix;

这会创建一个3d矩阵,但大小为0。接下来,当您向矩阵添加数据时,您需要确保矩阵足够大:

// Co-ords are integers
double datawrite(int x, int y, int z, double val)
{
    // Make sure vectors are large enough
    if (matrix.size() < x+1) matrix.resize(x+1);
    if (matrix[x].size() < y+1) matrix[x].resize(y+1);
    if (matrix[x][y].size() < z+1) matrix[x][y].resize(z+1);

    // Store the value
    matrix[x][y][z] = val;
    return val;
}

然而,这有点乱,并使矩阵处于不完整状态。例如,如果您调用datawrite(2, 3, 4, 9.9);,则可能会显示所有索引&lt; 2,3,4是有效的,但它们不是。例如,尝试阅读matrix[0][0][0]会给您一个错误。

您可以使用dataread函数解决此问题,该函数会在尝试从中读取向量之前检查向量的大小。

如果你提前知道矩阵有多大,你可以像这样一次创建整个矩阵:

vector<vector<vector<double>>> matrix(10, vector<vector<double>>(10, vector<double>(10)));

这将创建一个完整的10x10x10矩阵。这确保了所有索引&lt; 10将有效。我更喜欢这种方法。然后你的功能变为:

double datawrite(int x, int y, int z, double val)
{
    // Make sure indexes are valid
    if (x >= matrix.size() || y >= matrix[x].size() || z >= matrix[x][y].size()) {
        // Up to you what to do here.
        // Throw an error or resize the matrix to fit the new data
    }

    // Store the value
    matrix[x][y][z] = val;
    return val;
}