STL 算法 std::advance
std::advance(block_end,block_size);
1. 写说明
2. 写用法
3.写样例
直接参考 cplusplus官网讲解:http://www.cplusplus.com/reference/iterator/advance/
我的理解:
std::advance 第一个参数,一个迭代器; 第二个参数,一个整形数值。作用是把一个迭代器移动 n 个位置,数值大于零,则向后移动, 数值小于零,则向前移动。
特别的一点是:如果迭代器是随机访问迭代器,则不论 n 是多少,仅向后或向前移动一个位置。
思考: std::advance (it, 5) 与 it += 5; 效果完全相同,为何需要 std::advance 存在?况且,it += n , 或者 it -= n, 可能会超出范围导致异常, std::advance 同样会超出范围导致异常。
练习代码:
1 // advance example 2 #include <iostream> // std::cout 3 #include <iterator> // std::advance 4 #include <list> // std::list 5 #include <array> 6 #include <algorithm> 7 8 int main () { 9 std::list<int> mylist; 10 for (int i=0; i<10; i++) mylist.push_back (i*10); 11 12 std::cout<<"mylist element is:"<<std::endl; 13 std::for_each(mylist.begin(), mylist.end(), [&](int & element){std::cout<<" "<<element;}); 14 std::cout<<std::endl; 15 16 std::list<int>::iterator it = mylist.begin(); 17 18 std::advance (it,5); 19 20 std::cout << "The sixth element in mylist is: " << *it << '\n'; 21 22 std::advance (it, 4); 23 std::cout << "The tenth element in mylist is: " << *it << '\n'; 24 25 std::array<int, 10> myarray; 26 std::for_each(std::begin(myarray), std::end(myarray), [&](int & element){ 27 element = *it; 28 (it==mylist.begin())?mylist.begin():--it;}); 29 30 std::cout<<"myarray element is:"<<std::endl; 31 std::for_each(myarray.begin(), myarray.end(), [&](int & element){std::cout<<" "<<element;}); 32 std::cout<<std::endl; 33 34 auto iitt = myarray.begin(); 35 36 std::advance (iitt, 5); 37 38 std::cout << "The sixth element in myarray is: " << *iitt << '\n'; 39 40 iitt = myarray.begin(); 41 42 iitt +=5; 43 44 std::cout << "The sixth element in myarray is: " << *iitt << '\n'; 45 46 return 0; 47 }
输出结果:
原创文章, 转载请注明出处!