输入是一个大小为n的二维矩阵,它包含从1到N的所有值,即从1到N^2中的每个值只在矩阵中出现一次。 我试图保存输入的索引值(1到n * n)使用向量中位置n的向量对。std :: vector :: insert给出了意想不到的结果
#include <iostream>
#include<vector>
using namespace std;
int main() {
int n;
cin>>n;
int a[n][n];
vector<pair<int,int> > v(n*n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
v.insert(v.begin()+a[i][j]-1, make_pair(i+1,j+1));
}
}
for(int i=0;i<n*n;i++)
cout<<v[i].first<<" "<<v[i].second<<endl;
return 0;
}
input: 3
1 7 9
2 4 8
3 6 5
output:1 1
2 1
3 1
0 0
3 3
2 2
3 2
0 0
0 0
expected output:1 1
2 1
3 1
2 2
3 3
3 2
1 2
2 3
1 3
在for循环的第一次迭代之后获取意外输出。
这不是C++,这很可能是gnu-C++和[VLA扩展](http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html)。 – nwp
更好的矩阵表示与'std :: vector'可能是'std :: vector>'。 –
如果我明白你在做什么(我可能不会),你不应该使用迭代器。只需要对i,j和a [i] [j]做一些简单的数学运算。 – Aderis