c++11 std::prev、std::next、std::advance与auto 使用
-
auto
定义变量时放在变量前,无需知道具体变量类型,系统可自行推断类型,减少编程工作,特别是在模板使用时,使用更方便。
下面简单例子:
1 auto a=1; 2 auto b='a'; 3 auto s="abdc"; 4 auto c;//这样使用时错误的,系统无法自动推断出变量类型 5 //下面为迭代指针使用,很方便 6 vector<int> vec; 7 auto it=vec.begin();
模板使用例子:
1 template<typename InputIterator> 2 TreeNode *creatTree(InputIterator in_beg,InputIterator in_end...) 3 { 4 ..... 5 auto inRootPos=find(in_beg,in_end,val); 6 ...... 7 }
-
std::next(英文原版)
Defined in header <iterator>
template< class ForwardIt >
ForwardIt next( ForwardIt it,
typename std::iterator_traits<ForwardIt>::difference_type n = 1 );
Return the nth successor of iterator it.
Parameters
it -- 迭代指针
n -- 向前进的元素个数,缺省默认为1
Return value
The nth successor of iterator it.(返回it的第n个后继迭代指针)
一种实现:
template<class ForwardIt> ForwardIt next(ForwardIt it, typename std::iterator_traits<ForwardIt>::difference_type n = 1) { std::advance(it, n); return it; }
综合例子:
1 #include <iostream> 2 #include <iterator> 3 #include <vector> 4 5 int main() 6 { 7 std::vector<int> v{ 3, 1, 4 }; 8 9 auto it = v.begin(); 10 11 auto nx = std::next(it, 2); 12 13 std::cout << *it << ' ' << *nx << '\n'; 14 }
输出:
3 4
-
std::prev(英文原版)
使用方法与next相似,不同的是prev返回的是it的第n个前驱迭代指针
template< class BidirIt >
BidirIt prev( BidirIt it,
typename std::iterator_traits<BidirIt>::difference_type n = 1 );
一种实现:
1 template<class BidirIt> 2 BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1) 3 { 4 std::advance(it, -n); 5 return it; 6 }
例子:
1 #include <iostream> 2 #include <iterator> 3 #include <vector> 4 5 int main() 6 { 7 std::vector<int> v{ 3, 1, 4 }; 8 9 auto it = v.end(); 10 11 auto pv = std::prev(it, 2); 12 13 std::cout << *pv << '\n'; 14 }
输出: