輸入是一個大小爲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