[英]c++ list iterator arithmetic replacement ideas
我有一個可以在多個地方訪問的列表。 在某些情況下,我需要從列表開始循環到(end-n)元素以及訪問整個列表的其他元素。 我在使用迭代器算法時遇到了麻煩。
我想要的東西可以做到以下幾點:
int n =10;
for (list<Term>::iterator itr = final.begin(); itr != (final.end()-n); itr++) {
//
}
下面的偽代碼是否有意義?
int N = myList.size() - n;
for (list<Term>::iterator itr = final.begin(),int length_reached=0; itr != (final.end() && length_reached<N; itr++,length_reached++) {
//
}
為我使用rbegin不是一個選項,因為我想從列表的開頭得到匹配的第一個實例。
這里有更好的實施方式嗎?
由於它是一個列表,隨機訪問很慢。 幸運的是:
std::list
有一個size()方法 這是一種方式:
list<Term>::iterator itr = final.begin();
int to_do = std::max(0, int(final.size()) - n);
for ( ; to_do ; --to_do, ++itr )
{
// code here
}
你可以使用反向迭代器和std :: advance
auto rit =final.rbegin();
std::advance(rit, n);
for (auto itr=final.begin(); itr!=rti.base(); ++itr) {
}
是的,你可以這樣做
if ( n < final.size() )
{
auto m = final.size() - n;
for ( auto first = final.begin(); m != 0; ++first, --m )
{
//...
}
}
如果迭代器本身可以在循環中更改,那么您可以通過以下方式編寫循環條件
if ( n < final.size() )
{
auto m = final.size() - n;
for ( auto first = final.begin(); m != 0 && first != final.end(); ++first, --m )
{
//...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.