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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Vector反向迭代器使用

發布時間:2025/5/22 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vector反向迭代器使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反向迭代器

1 反向迭代器其實沒什么特殊的,他只是在遍歷的方向上和普通迭代器不通而已:每一個容器里面都有Iterator(迭代器),可以從容器的begin位置到end-1位置,通過++來遍歷。同樣也有個反向迭代器reverse_iterator,從rbegin(=end)到rend(=begin-1)反向遍歷,仍然通過++.?????????????????????? ???????????????????????????????

2 反向迭代器的一些應用

①??? 用反向迭代器逆向輸出vector中的內容:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

??? vector<int> vec;

??? int i;

??? cin >> i;

??? while (i != -1)

??? {

??? ?? vec.push_back(i);

??? ?? cin >> i;

??? }

??? cout << "反向迭代器輸出: " << endl;

??? vector<int>::reverse_iterator it= vec.rbegin();

??? while (it != vec.rend())

??? {

??? ?? cout << *it << " " ;

??? ?? ++it;

??? }

??? cout << endl << "普通的迭代器逆序輸出: "<< endl;

??? vector<int>::iterator iter= vec.end();

??? while( iter != vec.begin())

??? {

??? ?? cout << *(--iter) <<" ";

??? }

??? return 0;

}

②? 反向迭代器和sort函數結合可以對數據進行降序排列

#include <iostream>

#include <vector>

#include <algorithm>

#include <iterator>

using namespace std;

int main()

{

? int num[] = {2,5,1,4,8,6,3};

? vector<int> vec(num,num+7);

? cout << "排序前: "<<endl;

? for (vector<int>::iterator it= vec.begin();it!= vec.end(); ++it)

? {

????? cout << *it << " ";

? }

? sort(vec.begin(),vec.end());

? cout << endl << "普通迭代器排序后: "<<endl;

? for (it = vec.begin();it != vec.end();++it)

? {

????? cout << *it << " ";

? }

? cout << endl;

? sort(vec.rbegin(),vec.rend());

? cout << "反向迭代器排序后: " << endl;

? for ( it = vec.begin();it != vec.end();++it)

? {

????? cout << *it << " ";

? }

? return 0;

}

③? ?反向迭代器和copy和流迭代器結合的例子

?

#include <iostream>

#include <vector>

#include <iterator>

using namespace std;

int main()

{

??? int casts[10] = {6, 7, 2, 9, 4, 11, 2, 1, 10, 5};

??? vector<int> test(10);

??? vector<int>::reverse_iterator ri;

??? ostream_iterator<int,char> os_iter(cout," ");//聲明一個輸出流迭//代器,以空格間隔

??? copy(casts, casts + 10, test.begin());//將數組內容copy到容器內

??? cout << " 采用輸出流迭代器輸出數組元素:" << endl;

??? copy(casts, casts + 10, os_iter);

??? cout << endl << " 采用輸出流迭代器輸出容器元素:"<< endl;

??? copy(test.begin(), test.end(), os_iter);

??? cout << endl << " 采用輸出流迭代器和反向迭代器反序輸出容器元素:"<< endl;

??? copy(test.rbegin(), test.rend(), os_iter);

??? cout << endl << " 直接采用反向迭代器輸出容器元素: "<< endl;

??? for(ri = test.rbegin(); ri != test.rend(); ++ri)

??? {

??????? cout << * ri << " ";

??? }

??? return 0;

}

④? 利用反向迭代器獲得字符串末尾的一個單詞

如我們用一個string字符串存儲了一些單詞列表,里面各個單詞以’,’間隔。我們可以利用反向迭代器和find算法結合獲得最后一個單詞。

我們先來利用普通的迭代器獲得第一個單詞。

#include <iostream>

#include <string>

#include <algorithm>

using namespace std;

int main()

{

??? ???string str = "C++,STL,Template";

??? ???string::iterator it = find(str.begin(),str.end(),',');

??? //返回指向第一個’,’的迭代器

??? ?? cout << string(str.begin(),it)<< endl;//重新構造一個string返回

??? ???return 0;

}

用反向迭代器獲得最后一個單詞

#include <iostream>

#include <iterator>

#include <string>

#include <algorithm>

using namespace std;

int main()

{

??? ?string str = "C++,STL,Template";

??? ?string::reverse_iterator it = find(str.rbegin(),str.rend(),',');

??? ?cout << string(it.base(),str.end())<< endl;

??? ?return 0;

}

轉自:http://blog.csdn.net/jansonleader/article/details/5348321

總結

以上是生活随笔為你收集整理的Vector反向迭代器使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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