定義變量時放在變量前,無需知道具體變量類型,系統可自行推斷類型,減小編程工做,特別是在模板使用時,使用更方便。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 }
輸出: