1

私がやりたいstd::listのは、最後の要素を除いて、ただ繰り返すことです。私が試していること:

#include <cstdlib>
#include <list>

int main() {
  std::list<int> *list = new std::list<int>(100);
  std::list<int>::iterator it;

  for (it = list->begin(); it != list->end()-1; it++) {
    // some action here...
  }
}

ただし、これは機能しません。なにが問題ですか?

4

2 に答える 2

4

std::listをサポートしない双方向イテレータを使用しますoperator-std::prev代わりに使用してください:

for (it = list->begin(); it != std::prev(list->end()); it++) {
  // some action here...
}
于 2012-11-10T00:35:27.010 に答える
4

これが失敗する理由について:

Alist::iteratorBidirectionalIteratorです。operator-を使用してデクリメントしたり、を使用してインクリメントしたりすることはできませんoperator+。これらの操作は、のモデル用に予約されていますRandomAccessIterator。ただし、を使用してデクリメントできますoperator--

std::list<int> x;
// --end(x) would work as well here, but I don't recommend it
auto end = end(x); 
--end;

// or even better
end = std::prev(end(x));

for(auto it = begin(x); it != end; ++it) {

}

また、ポインタをドロップしてください。あなたの簡単な例はすでにメモリリークです。

于 2012-11-10T00:42:16.493 に答える