2016-11-29 8 views
-1

iteratorを使用して、3Dベクトルから古いデータを消去しようとしています。ここではこれに関連し、私のコードの一部です:多次元ベクトルから要素を消去する

vector< vector<vector <int> > > vol; 
vector< vector< vector<int> > >::iterator row; 
vector< vector<int> >::iterator col; 
vector<int>::iterator dep; 

for (row = this->vol.begin(); row != this->vol.end(); ++row) 
{ 
    for (col = row->begin(); col != row->end(); ++col) 
    { 
     for (dep = col->begin(); dep != col->end(); ++dep) 
     { 
     if (*dep <= date - 10) { 

      dep = this->vol.erase(dep); 
     } 
    } 
} 

が、私は、コンパイラのエラーを取得:

no matching function for call to ‘std::vector<std::vector<std::vector<int> > >::erase(std::vector<int>::iterator&)’ 

私が間違っているのは何を?あなたはどのoveralコンテナにvolに消去呼び出すようにしようとしている

答えて

0

ありがとうございました。あなたがする必要があるのは、 depが属するベクトルを消去することです。 depvector<int>上のイテレータにあるときに

if (*dep <= date - 10) { 
    dep = col->erase(dep); 
} 
+0

おかげネイサン。 1つではなく3つ目の要素のすべてを削除する必要がある場合はどうすればよいですか? –

+0

@ em.ech 'col'がクリアされることを表すベクトル全体を欲しければ' col-> clear(); 'だけが必要です。 – NathanOliver

0

volで必要なものcolによって指されるベクトルの要素にdepポイントのでvector< vector<vector <int> > >です。 vol->eraseのパラメータとしては、vector< vector<vector <int> > >のイテレータのみをパラメータとして使用できます。

さらに、書き込み時にforループを使用してベクトルからアイテムを消去することはできません。 whileイテレータはアイテムが消去されていない場合にのみインクリメントする必要があるため、ループを優先する必要があります。

0

depは、最も内側のベクトル要素の1つの要素のイテレータであり、最も外側のベクトルから要素を消去するために使用しようとしています。

試してみてください。

dep = col->erase(dep); 
関連する問題