定义变量时放在变量前,无需知道具体变量类型,系统可自行推断类型,减小编程工做,特别是在模板使用时,使用更方便。ios
下面简单例子:编程
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();
模板使用例子:spa
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>
code
template< class ForwardIt >
blog
ForwardIt next( ForwardIt it,
get
typename std::iterator_traits<ForwardIt>::difference_type n = 1 );it
Return the nth successor of iterator it.io
it -- 迭代指针模板
n -- 向前进的元素个数,缺省默认为1
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 }
输出: