我剛剛寫了下面的代碼,並且非常驚訝它不會編譯:爲什麼不擦除支持反向迭代器?
std::deque<int> container;
// filling the container...
for (auto it = container.rbegin(); it != container.rend(); ++it)
if (*it == 5)
{
container.erase(it);
break;
}
正如你所看到的,我想刪除符合某種標準的最後一個元素,如果有的話。
的錯誤是
沒有匹配函數調用 的std :: deque的::擦除(的std :: reverse_iterator的...
起初我不相信這是通過反向迭代器造成的,但確實是因爲與begin
/end
解決它取代rbegin
/rend
的情況下
所以,2個問題:
- 爲什麼不支持?它僅僅是C++委員會忘記包含在標準中的那些小事情之一,還是缺少這種超載的理由?
- 什麼是最優雅的方式來做我想要的?我堅持迭代索引?
我想你的答案在這裏:http://stackoverflow.com/questions/1830158/how-to-call-erase-with-a-reverse-迭代器 –
'm_container'和'container',是否一樣? – ZDF
@ZDF:是的,當然。固定。 –