我需要从二维数组中分离值。我需要做的就是存储具有特定值的所有字段索引。
例如,我可能有一个数组,其中3个单元格的值为1,10个字段的值为2。 我尝试创建1个向量,它存储值为1的所有索引,另一个向量存储值为2的所有索引。
这是我一直在努力编写的代码,但它似乎没什么意思
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]);
}
}
}
答案 0 :(得分: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);
}
}
}
}
毫无疑问,这可以提高效率,但我认为它有效。