日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

move std 函数 示例_C++ STL迭代器辅助函数

發(fā)布時間:2024/9/27 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 move std 函数 示例_C++ STL迭代器辅助函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
advance(it, n) ---------- it 表示某個迭代器,n 為整數(shù)。該函數(shù)的功能是將 it 迭代器前進或后退 n 個位置。distance(first, last) ---------- first 和 last 都是迭代器,該函數(shù)的功能是計算 first 和 last 之間的距離。begin(cont) ---------- cont 表示某個容器,該函數(shù)可以返回一個指向 cont 容器中第一個元素的迭代器。end(cont) ---------- cont 表示某個容器,該函數(shù)可以返回一個指向 cont 容器中最后一個元素之后位置的迭代器。prev(it) ---------- it 為指定的迭代器,該函數(shù)默認可以返回一個指向上一個位置處的迭代器。注意,it 至少為雙向迭代器next(it) ---------- it 為指定的迭代器,該函數(shù)默認可以返回一個指向下一個位置處的迭代器。注意,it 最少為前向迭代器。

本節(jié)先講解 advance() 函數(shù),其他函數(shù)后續(xù)章節(jié)會做詳細介紹。

advance() 函數(shù)用于將迭代器前進(或者后退)指定長度的距離,其語法格式如下:

template void advance (InputIterator& it, Distance n);

其中 it 指的是目標迭代器,n 通常為一個整數(shù)。

需要注意的是,如果 it 為輸入迭代器或者前向迭代器,則 n 必須為一個正數(shù),即表示將 it 右移(前進) n 個位置;反之,如果 it 為雙向迭代器或者隨機訪問迭代器,則 n 為正數(shù)時表示將 it 右移(前進) n 個位置,n 為負數(shù)時表示將 it 左移(后退) n 個位置。

另外,根據(jù) it 類型是否為隨機訪問迭代器,advance() 函數(shù)底層采用了不同的實現(xiàn)機制:

1.當 it 為隨機訪問迭代器時,由于該類型迭代器支持 p+n 或者 p-n(其中 p 就是一個隨機訪問迭代器)運算,advance() 函數(shù)底層采用的就是 it+n 操作實現(xiàn)的;

2.當 it 為其他類型迭代器時,它們僅支持進行 ++ 或者 -- 運算,這種情況下,advance() 函數(shù)底層是通過重復執(zhí)行 n 個 ++ 或者 -- 操作實現(xiàn)的。

值得一提的是,advance() 函數(shù)定義在頭文件,并位于 std 命名空間中。因此,程序在使用該函數(shù)之前,應包含如下 2 行代碼:

#include using namespace std;示例:#include // std::cout#include // std::advance#include using namespace std;int main() { //創(chuàng)建一個 forward_list 容器 forward_list mylist{1,2,3,4}; //it為前向迭代器,其指向 mylist 容器中第一個元素 forward_list::iterator it = mylist.begin(); //借助 advance() 函數(shù)將 it 迭代器前進 2 個位置 advance(it, 2); cout << "*it = " << *it; return 0;}

程序執(zhí)行結果為:

*it = 3

此程序中,由于 it 為前向迭代器,其只能進行 ++ 操作,即只能前進(右移),所以 advance() 函數(shù)的第 2 個參數(shù)只能為正數(shù)。

下面程序以 vector 容器為例,演示了 advance() 函數(shù)的功能:

#include // std::cout#include // std::advance#include using namespace std;int main() { //創(chuàng)建一個 vector 容器 vector myvector{1,2,3,4}; //it為隨機訪問迭代器,其指向 myvector 容器中第一個元素 vector::iterator it = myvector.begin(); //借助 advance() 函數(shù)將 it 迭代器前進 2 個位置 advance(it, 2); cout << "1、*it = " << *it << endl; //繼續(xù)使用it,其指向 myvector 容器中最后一個元素之后的位置 it = myvector.end(); //借助 advance() 函數(shù)將 it 迭代器后退 3 個位置 advance(it, -3); cout << "2、*it = " << *it; return 0;}

程序執(zhí)行結果為:

1、*it = 32、*it = 2

注意,advance() 函數(shù)本身不會檢測 it 迭代器移動 n 個位置的可行性,如果 it 迭代器的移動位置超出了合理范圍,it 迭代器的指向將無法保證,此時使用 *it 將會導致程序崩潰。

總結

以上是生活随笔為你收集整理的move std 函数 示例_C++ STL迭代器辅助函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。