对于C ++中的向量来说还是比较新的,这个函数的目的是获取4个参数,其中3个定义被写入数据的(x,y,z)位置,第4个是该值的值。写的。
as Requested,列出了错误图片:
问题出在" 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;
}
答案 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;
}