gpt4 book ai didi

C++:访问冲突

转载 作者:行者123 更新时间:2023-11-28 07:21:13 26 4
gpt4 key购买 nike

我正在创建一个矩阵,然后我想用 0 填充它的值。

我在这一行遇到访问冲突错误:

mat1[x][y]=0;

但我不明白为什么。

这是我的代码:

vector<float>getJenksBreaks(vector<float>uFloats,const unsigned int uNumClass)
{

float* first(&uFloats[0]);
float* last(first + uFloats.size());
std::sort(first, last);

float **mat1 = new float*[uFloats.size()];
for (int i = 0; i < uFloats.size(); ++i)
{
mat1[i] = new float[uNumClass+1];
}
for (unsigned long x=0;x<uNumClass+1;x++)
{
for (unsigned long y=0;y<uFloats.size();y++)
{
mat1[x][y]=0;
}
}

有人看到我的错误吗?

谢谢。

最佳答案

而不是手动处理动态内存:

vector<float> getJenksBreaks(vector<float> uFloats, const unsigned int uNumClass)
{
std::sort(uFloats.begin(), uFloats.end());

std::vector<std::vector<float>> mat(uFloats.size());
std::for_each(mat.begin(), mat.end() [&](std::vector<float>& v)
{
v.resize(uNumClass);
});

// ...
}

或者(甚至更好)......

vector<float> getJenksBreaks(vector<float> uFloats, const unsigned int uNumClass)
{
std::sort(uFloats.begin(), uFloats.end());

std::vector<std::vector<float>> mat(uFloats.size(), std::vector<float>(uNumClass));

// ...
}

这将完全按照您的要求进行操作,而无需担心索引的正确放置,并且更不容易出错。

最后,您可以简单地创建一个简单的 Matrix 包装类:

class Matrix
{
public:
Matrix(std::size_t rows, std::size_t cols) : _matrix(rows, std::vector<float>(cols))
{

}

// other matrix functions

private:
std::vector<std::vector<float>> _matrix;
};

这会将你的代码变成

vector<float> getJenksBreaks(vector<float> uFloats, const unsigned int uNumClass)
{
std::sort(uFloats.begin(), uFloats.end());
Matrix matrix(uFloats.size(), uNumClass);

// ...
}

关于C++:访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com