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