3D 矢量 - "No instance of overload function?"

3D Vector - "No instance of overload function?"

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

根据要求,列出了错误图片:

Picture of code listed above

问题出在 "push_back" 代码下。这 ”。”在 yy.push 和 xx.push 之后出现错误 "no instance of overloaded function".

如果有人能解释这是什么意思以及如何解决它,我将不胜感激! :)

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

所以你想要一个双打的 3d 矩阵?首先你需要创建它:

#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); 这可能看起来所有索引 < 2,3,4 都是有效的,但它们不是。例如尝试读取 matrix[0][0][0] 会给你一个错误。

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

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

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

这将创建一个完整的 10x10x10 矩阵。这确保所有小于 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;
}