これは非常に単純な質問ですが、何がうまくいかなかったのかわかりません。このコードは、pixIDベクトルの要素数をカウントし、その合計を正方行列PtPの対角要素に返します。ただし、最初のループの「i」は次のようになりますが、要素の場合、出力は次のようになります。
1,0,0,0,
0,0,3,0,
0,0,0,0,
0,3,0,0,
希望の代わりに:
1,0,0,0,
0,3,0,0,
0,0,2,0,
0,0,0,2,
ここで何が起こっているのか分かりますか?
double where(std::vector<double> &vec,unsigned int &v){
double count = 0;
int val;
for(std::vector<double>::iterator it = vec.begin();
it != vec.end();
++it){
if(*it == val){
count++;
}
}
return count;
}
int main(){
unsigned int pixSide = 2;
int id;
std::vector<double> pixID {1,1,2,3,0,2,1,3};
std::vector<double> PtP (pixSide*pixSide);
for(unsigned int i=0;i<pixSide*pixSide;i++){
id = i*pixSide*pixSide + i;
std::cout << id << std::endl;
PtP[id] = where(pixID,i);
}
for(int i=0;i<pixSide*pixSide;i++){
for(int j=0;j<pixSide*pixSide;j++){
std::cout << int(PtP[i*pixSide + j]) << ',';
if(j==pixSide*pixSide-1){
std::cout << std::endl;
}
}
}
}