嗨,我正试图实现 扩散有限聚合 在openframeworks里面用c++实现了一个算法,我有一个类,在这个类里面我定义了两个向量,分别叫做walkers和fixed,分别包含死的和活的移动和不动的粒子。我有一个类,在这个类中,我定义了两个向量,分别叫做walkers和fixed,分别包含死的和活的移动和不动的粒子。我的更新函数是这样的。
void DLA::update() {
// Permutation buffer
vector<int> buffer;
for (std::size_t i = 0; i != walkers.size(); ++i) // go through every main/alive particles
{
walkers[i].update();
for (std::size_t j = 0; j != fixed.size(); ++j) // go through every fixed/dead particles
{
float distance = walkers[i].position.distance(fixed[j].position); // calculate the distance between them
if (distance < 5) // if the distance is small enough
{
buffer.push_back(i); // put the index of the alvie walker in buffer for deletion
}
}
}
// Apply buffered information
for (std::size_t i = buffer.size(); i != 0; --i)
{
walkers[buffer[i]].randomWalk = 0; // make it dead
fixed.push_back(walkers[buffer[i]]); // put it in the fixed/dead vector
walkers.erase(walkers.begin() + buffer[i]); // take it out from the main alive vector
}
buffer.clear();
}
但是每次运行这个都会得到一个向量下标超出范围的错误。由于不熟悉c++和visual studio,也不习惯依赖框架,我很难读懂错误来自哪里,因为我找不到我写的脚本中,问题起源于哪里。编译器给我发送了另一个页面的代码,属于基础openframeworks类代码,说是在那里检测到的错误。
我已经开始进入调试模式,但从那里我看到的是我的RandomWalker数组的原始值。
我的代码有什么问题,我怎样才能从Visual Studio给我的信息中清楚地看出问题呢? 谢谢!
编辑:
在不使用缓冲区的情况下固定了它,只是以相反的顺序运行两个向量。
for (std::size_t i = walkers.size() - 1; i != -1; --i)
{
for (std::size_t j = fixed.size() - 1; j != -1; --j) // go through every fixed/dead particles
{
// Calculate Distance
float distance = walkers[i].position.distance(fixed[j].position);
if (distance < (walkers[i].radius + fixed[j].radius)) // if the distance is small enough
{
walkers[i].randomWalk = 0; // make it dead
fixed.push_back(walkers[i]); // put it in the fixed/dead vector
walkers.erase(walkers.begin() + i); // take it out from the main alive vector
break;
}
}
}
就是这个循环
// Apply buffered information
for (std::size_t i = 0; i != buffer.size(); ++i)
{
walkers[i].randomWalk = 0; // make it dead
fixed.push_back(walkers[i]); // put it in the fixed/dead vector
walkers.erase(walkers.begin() + i); // take it out from the main alive vector
}
您正在从前面的 walkers
当你在它上面循环的时候,你会通过 buffer.size()
你的意思是要使用 buffer
?