Tum*_*uma 2 c++ iterator for-loop c++11
这段代码:
for (std::list<point>::const_iterator it = controlPoints->begin();
it != controlPoints->end();
++it) {
...
}
Run Code Online (Sandbox Code Playgroud)
对应于:
for (int i = 0; i < controlPoints->size; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
意思是,如果我每次循环获得一个元素,它将迭代列表中的所有元素.
什么对应于:
for (int i = 0; i < controlPoints->size-1; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
我的意思是,如何使用迭代器循环大小1次?
显而易见的方法是将迭代器放到最后并减少它:
auto stop = controlPoints.end();
--stop;
for (std::list<point>::const_iterator it = controlPoints->begin();
it != stop;
++it) {
...
}
Run Code Online (Sandbox Code Playgroud)
您可以使用std::advance
或者std::next
如果您愿意,但对于这种情况,简单的减量就可以了.
controlPoints->end()
也是一个迭代器.
你可以这样做:
std::list<point>::const_iterator it = controlPoints->begin();
std::list<point>::const_iterator stop = controlPoints->end();
if ( it != stop) for ( --stop; it != stop; ++it) {
...
}
Run Code Online (Sandbox Code Playgroud)
更详细,但使用该列表是否包含0个,1个或更多元素是安全的.
这里的关键是迭代器可以递增,并且(对于双向迭代器)递减以提前/后退位置,因此它相当于:
int it = 0;
int stop = list.size();
if (it != stop) for( --stop; it < stop; ++it ) {
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
674 次 |
最近记录: |