使用stl中的 advance和 distance 方法來進行iterator的加減 以前在遍曆vector的時候,經常使用iterator之間的加減來獲得元素在容器裡面的index。
今天在進行list的 iterator加減的時候,發現不能編譯通過,後面想起list是非線性容器,不能加減。
查了一下資料,發現stl有提供兩個iterator加減的方法:advance 和 distance
advance是 將iterator移動,而distance是計算兩個iterator直接的距離。
template<typename _InputIterator>
inline typename
iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last)
{
// concept requirements -- taken care of in __distance
return std::__distance(__first, __last,
std::__iterator_category(__first));
}
第一個參數first,第二個參數last
返回的是基於 first + n = last ,中的 n
也就是基於,last 是由first經過n可以到達的,注意n可能為負的。
我第一次使用這個就是將兩個參數順序弄反了,結果返回負的n,而我這個是對應一個數位Index下標,結果導致找不到對應的index的元素。
例子代碼如下:
std::vector<STableInfor>::iterator iter_begin = m_tableInfoList.begin(); std::vector<STableInfor>::iterator iter_end = m_tableInfoList.end(); int index = distance(iter_begin,iter_end);