矢量插入分段错误第二次迭代
vector insert segmentation fault second iteration
我实际上正在尝试实现弗洛伊德的Warhall算法,但我遇到了一个难题。当我试图在我的序列矩阵中找到最短路径时,我遇到了分割错误。我遵循本教程:弗洛伊德的沃歇尔算法
除了第 124 行之外,一切正常:
chemin.insert(it,sequenceTest[v1-1][temp-1]);
我得到段错误的地方(你可以跳过第一部分,除非你想知道我是如何实现算法的,问题在第二部分):
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
int i,j,k;
int sequenceTest [4][4] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};
int tempSequenceTest [4][4];
int distanceTest [4][4] = {{0,2,4,100000},{2,0,1,5},{4,1,0,3},{100000,5,3,0}};
int tempDistanceTest[4][4];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<sequenceTest[i][j]<<" ";
}
cout<< endl;
}
cout<< endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout << distanceTest[i][j] << " ";
}
cout<< endl;
}
cout<< endl;
for(k=0;k<3;k++)
{
cout <<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout << "i: " << i << " j: " << j << endl;
if(i == k)
{
tempSequenceTest[i][j] = sequenceTest[i][j];
tempDistanceTest[i][j] = distanceTest[i][j];
cout << " D " << tempDistanceTest[i][j] << " S " << tempSequenceTest[i][j];
}
if(j == k)
{
tempSequenceTest[i][j] = sequenceTest[i][j];
tempDistanceTest[i][j] = distanceTest[i][j];
cout << " D " << tempDistanceTest[i][j] << " S " << tempSequenceTest[i][j];
}
cout<< endl;
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
//cout<< "i: " << i << " j: " << j << " k:" << k << endl;
if(i!=k && j!=k)
{
if(distanceTest[i][j]> distanceTest[i][k] + distanceTest[k][j])
{
tempDistanceTest[i][j] = distanceTest[i][k] + distanceTest[k][j];
cout << distanceTest[i][j] << " > " << distanceTest[i][k] << " + " << distanceTest[k][j] << " = " << tempDistanceTest[i][j] << " " << i << j << endl;
tempSequenceTest[i][j] = k+1;
}
else
{
tempDistanceTest[i][j] = distanceTest[i][j];
tempSequenceTest[i][j] = sequenceTest[i][j];
}
}
}
}
cout<< endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
distanceTest[i][j] = tempDistanceTest[i][j];
sequenceTest[i][j] = tempSequenceTest[i][j];
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<tempSequenceTest[i][j]<<" ";
}
cout<< endl;
}
cout<< endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout << tempDistanceTest[i][j] << " ";
}
cout<< endl;
}
}
int v1, v2;
v1 = 1;
v2 = 4;
vector <int> chemin;
vector <int>::iterator it;
chemin.push_back(v1);
chemin.push_back(v2);
int temp = v2;
cout << sequenceTest[0][2];
while(sequenceTest[v1-1][temp-1] != v2)
{
it = chemin.begin() + 1;
cout << "V1: " << v1 << " V2: " << v2 << " Temp: " << temp << endl;
chemin.insert(it,sequenceTest[v1-1][temp-1]);
for(i=0;i<chemin.size();i++)
{
cout << chemin[i];
}
cout << endl;
temp = sequenceTest[v1-1][temp-1];
}
}
感谢您的关注和抽出宝贵时间帮助我!
chemin.insert(it,sequenceTest[v1-1][temp-1]);
这将使迭代器it
无效,但您可以在随后的迭代中继续重用它。如果要继续在同一位置插入,请捕获返回值。
it = chemin.insert(it,sequenceTest[v1-1][temp-1]);
相关文章:
- 在一次迭代中从 txt 文件中读取多行
- 高级选择排序 - 在一次迭代中搜索两个元素
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- foor 循环的最后一次迭代中的指针更改
- 虽然循环只做 1 次迭代
- GetDIBits 在屏幕捕获函数中多次迭代后返回零
- 是什么导致我的循环在第一次迭代中运行得更慢
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 为什么第一次迭代后的指针指向随机值?
- cin语句在循环的第三次迭代中被跳过
- ifstream不会在下一次迭代中打开文件
- C++如何使用lambda表达式来捕获上一次迭代的值
- 在我的switch语句完全执行之前,我的while循环进入第二次迭代,我用c ++编码
- 为什么第二次迭代大量字节的速度要慢得多?以及如何解决它
- 矢量插入分段错误第二次迭代
- 第二次迭代崩溃顺序无关
- OpenCV的Brute Force Matcher在第二次迭代时崩溃
- 指针在第二次迭代后不再工作
- 在C++中打开文件 - getline 在第二次迭代时失败