-4

2 次元配列から値を分離する必要があります。私がする必要があるのは、フィールドのすべてのインデックスを特定の値で保存することだけです。

たとえば、値 1 の 3 つのセルと値 2 の 10 フィールドを持つ配列があるとします。値 1 のすべてのインデックスを格納する 1 つのベクトルと、値 2 のすべてのインデックスを格納するもう 1 つのベクトルを作成しようとしました。

ここに私が書こうとしているコードがありますが、うまくいかないようです

void searchForGrains(Cell **tab, int _size){

storage.push_back(tab[0][0]);
Point p(0,0); // Point refers to array indexes
storage[0].points.push_back(p);

for(int i=0 ; i<_size ; ++i){
    for(int j=0 ; j<_size ; ++j){
        int counter = 0;

        for(unsigned int k=0 ; k<storage.size() ; k++){

            if(tab[i][j].value == storage[k].value){
                Point pp(i,j);

                storage[k].points.push_back(pp);
            }
            else
                counter++;
        }
            if(counter == storage.size())
                storage.push_back(tab[i][j]);

    }
}

}

4

1 に答える 1

0

かなり単純な論理エラーだと思います。問題は、ストレージ ベクトルに新しいエントリを追加しても、新しい値を見つけたときに、新しい値を見つけたポイントを追加しないことです。特別なケースを作成した 0,0 のものを除きますが、それを行う必要はありません。代わりにこれを試してください

void searchForGrains(Cell **tab, int _size)
{
    for(int i=0 ; i<_size ; ++i)
    {
        for(int j=0 ; j<_size ; ++j)
        {
            int counter = 0;
            for(unsigned int k=0 ; k<storage.size() ; k++)
            {
                if(tab[i][j].value == storage[k].value)
                {
                    Point pp(i,j);
                    storage[k].points.push_back(pp);
                }
                else
                    counter++;
            }
            if(counter == storage.size())
            {
                storage.push_back(tab[i][j]);
                Point pp(i,j);
                storage[storage.size() - 1].points.push_back(pp);
            }
        }
    }
}

これは間違いなくもっと効率的にできるかもしれませんが、うまくいくと思います。

于 2013-09-28T20:30:37.597 に答える