Vector反向迭代器使用
反向迭代器
1 反向迭代器其實沒什么特殊的,他只是在遍歷的方向上和普通迭代器不通而已:每一個容器里面都有Iterator(迭代器),可以從容器的begin位置到end-1位置,通過++來遍歷。同樣也有個反向迭代器reverse_iterator,從rbegin(=end)到rend(=begin-1)反向遍歷,仍然通過++.?????????????????????? ???????????????????????????????
2 反向迭代器的一些應用
①??? 用反向迭代器逆向輸出vector中的內(nèi)容:
#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函數(shù)結(jié)合可以對數(shù)據(jù)進行降序排列
如
#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和流迭代器結(jié)合的例子
?
#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());//將數(shù)組內(nèi)容copy到容器內(nèi)
??? cout << " 采用輸出流迭代器輸出數(shù)組元素:" << 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算法結(jié)合獲得最后一個單詞。
我們先來利用普通的迭代器獲得第一個單詞。
#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;//重新構(gòu)造一個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;
}
轉(zhuǎn)自:http://blog.csdn.net/jansonleader/article/details/5348321
總結(jié)
以上是生活随笔為你收集整理的Vector反向迭代器使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对vector等STL标准容器进行排序操
- 下一篇: vector使用排序函数实例