1.sort排序算法
sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) --默認(rèn)為升序排序
形參:_First、_Last --容器的起始和結(jié)束迭代器
_Pred --排序規(guī)則,默認(rèn)為從小到大
示例:
#include
#include
#include
using namespace std;
class Print
{
public:
void operator()(int val)
{
cout < val < " ";
}
};
void test()
{
vectorvtr;
vtr.push_back(rand()%50);
vtr.push_back(rand() % 50);
vtr.push_back(rand() % 50);
vtr.push_back(rand() % 50);
vtr.push_back(rand() % 50);
vtr.push_back(rand() % 50);
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
cout < "升序排序:" < endl;
sort(vtr.begin(), vtr.end());
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
cout < "降序排序:" < endl;
sort(vtr.begin(), vtr.end(), greater());
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
}
int main()
{
test();
system("pause");
}
2.random_shuffle打亂順序(洗牌)
打亂有序數(shù)列,重新洗牌:
void random_shuffle(_RanIt _First, _RanIt _Last);
形參:_First、_Last --起始和結(jié)束迭代器
#include
using namespace std;
#include
#include
#include
#include
class Person
{
friend class Print;
public:
Person() {}
Person(string name, int age) :name(name), age(age) {
}
bool operator(const Person p)const
{
if (age == p.age)
{
return name < p.name;
}
return age < p.age;
}
string name;
int age;
};
class Print
{
public:
void operator()(int val)
{
cout < val < " ";
}
void operator()(Person& p)
{
cout < "姓名:" < p.name < "t年齡:" < p.age < endl;
}
};
void test()
{
vectorvtr;
vtr.resize(10);
for (int i = 0; i < 10; i++)
{
vtr[i] = i;
}
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
cout < "洗牌后:" < endl;
random_shuffle(vtr.begin(), vtr.end());
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
}
void test02()
{
cout < "t自定義數(shù)據(jù):" < endl;
vectorvtr;
vtr.push_back(Person("小王", 1));
vtr.push_back(Person("小王", 2));
vtr.push_back(Person("小王", 3));
vtr.push_back(Person("小李", 1));
vtr.push_back(Person("小李", 2));
for_each(vtr.begin(), vtr.end(), Print());
cout < "洗牌后:" < endl;
random_shuffle(vtr.begin(), vtr.end());
for_each(vtr.begin(), vtr.end(), Print());
}
class mapPrint
{
public:
void operator()(pairp)
{
cout < "姓名:" < (p.first).name < "t年齡:" < (p.first).age < "t得分:" < p.second < endl;
}
};
int main()
{
srand(time(NULL));//random_shuffle底層需要隨機數(shù)種子,否則每次生成結(jié)果一樣
test();
test02();
system("pause");
}
3.merge合并容器
容器合并:
merge()實現(xiàn)吧兩個容器合并在一起,存放到第三個容器中。
注意:merge()合并一定要保證容器元素有序,默認(rèn)是從小到大的順序。
merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest) -->默認(rèn)從小到大
merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) -->重載版本,支持自定義排序規(guī)則
_First1、_Last1 --第一個容器的起始和結(jié)束迭代器
_Last2、_Dest --第二個元素的起始和結(jié)束迭代器
_Dest --要存儲的新容器起始迭代器
_Pred --謂詞,設(shè)定排序規(guī)則
謂詞:
函數(shù)對象返回中為bool類;
函數(shù)對象形參只有一個 --> 一元謂詞
函數(shù)對象形參有兩個 --> 二元謂詞
示例:
#include
#include
#include
#include
using namespace std;
class Print
{
public:
void operator()(int val)
{
cout < val < " ";
}
};
void test01()
{
vectorv1;
vectorv2;
for (int i = 0; i < 5; i++)
{
v1.push_back(i);
}
v2.push_back(2);
v2.push_back(16);
v2.push_back(12);
v2.push_back(14);
sort(v2.begin(), v2.end(), less());
vectorv3;
v3.resize(v1.size() + v2.size());
cout < "從小到大于有序合并:" < endl;
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
for_each(v3.begin(), v3.end(), Print());
cout());
sort(v2.begin(), v2.end(), greater());
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin(),greater());
for_each(v3.begin(), v3.end(), Print());
cout < endl;
}
int main()
{
test01();
system("pause");
}
;>
4.reverse元素反轉(zhuǎn)
函數(shù)功能: 元素反轉(zhuǎn),將容器中的元素前后顛倒
reverse(const _BidIt _First, const _BidIt _Last)
形參:_First、_Last --起始和結(jié)束迭代器
#include
#include
#include
using namespace std;
class Person
{
public:
Person() {}
Person(string name, int age) :name(name), age(age) {
}
Person(const Person& p)
{
this->age = p.age;
name = p.name;
}
bool operator( Person p)const
{
if (age == p.age)return name < p.name;
return age < p.age;
}
string name;
int age;
};
class Print
{
public:
void operator()(Person p)
{
cout < "姓名:" < p.name < "t年齡:" < p.age < endl;
}
};
void test()
{
vectorvtr;
vtr.push_back(Person("小王",18));
vtr.push_back(Person("小劉", 15));
vtr.push_back(Person("小林", 20));
for_each(vtr.begin(), vtr.end(), Print());
cout < "反轉(zhuǎn):" < endl;
reverse(vtr.begin(), vtr.end());
for_each(vtr.begin(), vtr.end(), Print());
}
int main()
{
test();
system("pause");
}
5.copy元素拷貝
_OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)
形參:_First、_Last --原容器的起始和結(jié)束位置
_Dest --目標(biāo)容器的起始位置
該函數(shù)功能類似于重載運算符=功能
#include
#include
#include
void test()
{
std::vectorvtr, vtr2;
vtr.push_back("C++");
vtr.push_back("copy算法");
vtr.push_back("學(xué)習(xí)");
vtr.push_back("案例");
std::cout < "copy算法使用示例:" < std::endl;
vtr2.resize(vtr.size());
copy(vtr.begin(), vtr.end(), vtr2.begin());//copy函數(shù)類似于賦值操作,vtr2=vtr1
for (std::vector::iterator p = vtr2.begin(); p != vtr2.end(); p++)
{
std::cout < *p < " ";
}
std::cout < std::endl;
}
int main()
{
test();
system("pause");
}
6.replace元素替換
元素替換
void replace(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)
形參:_First、_Last --要替換的數(shù)據(jù)區(qū)間
_Oldval --要替換的內(nèi)容
_Newval --替換后的內(nèi)容
#include
#include
using namespace std;
#include
using namespace std;
class Print
{
public:
void operator()(int val)
{
cout < val < " ";
}
};
void test()
{
vectorvtr;
vtr.push_back(10);
vtr.push_back(10);
vtr.push_back(30);
vtr.push_back(10);
vtr.push_back(35);
vtr.push_back(10);
cout < "替換前:" < endl;
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
cout < "將10替換成666" < endl;
replace(vtr.begin(), vtr.end(), 10, 666);
for_each(vtr.begin(), vtr.end(), Print());
cout < endl;
}
int main()
{
test();
system("pause");
}
7.條件替換replace_if
條件替換
replace_if(const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
形參:_First、_Last --要替換的區(qū)間
_Pred --謂詞,替換條件
_Val --替換后的值
示例:
#include
#include
#include
#include
using namespace std;
class Myreplace
{
public:
bool operator()(int val)
{
return val >= 30;
}
};
void test()
{
vectorvtr;
vtr.push_back(10);
vtr.push_back(10);
vtr.push_back(30);
vtr.push_back(10);
vtr.push_back(50);
vtr.push_back(10);
cout < "將所有的?>=30的值替換為666" < endl;
replace_if(vtr.begin(), vtr.end(), Myreplace(), 666);
for (vector::iterator ptr = vtr.begin();ptr != vtr.end();ptr++)
{
cout < *ptr < " ";
}
cout < endl;
}
int main()
{
test();
system("pause");
}
8.容器互換swap
容器元素互換:
swap(container v1,container v2);
將v1和v2的容器元素進(jìn)行互換,類似于成員函數(shù)swap();
#include
using namespace std;
#include
#include
class Print
{
public:
void operator()(int val)
{
cout < val < " ";
}
};
void test()
{
vectorvtr1 = { 10,20,30,50 };
vectorvtr2 = { 10,29,88 };
cout < "替換前:" < endl;
for_each(vtr1.begin(), vtr1.end(), Print());
cout < endl;
for_each(vtr2.begin(), vtr2.end(), Print());
cout < endl;
swap(vtr1, vtr2);
cout < "替換結(jié)果:" < endl;
for_each(vtr1.begin(), vtr1.end(), Print());
cout < endl;
for_each(vtr2.begin(), vtr2.end(), Print());
cout < endl;
}
int main()
{
test();
system("pause");
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
算法
+關(guān)注
關(guān)注
23文章
4607瀏覽量
92826 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73617 -
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18319
發(fā)布評論請先 登錄
相關(guān)推薦
c語言入門知識之STL篇
這周終于可以給大家把STL方面的面試題總結(jié)出來了,突然發(fā)現(xiàn)它里面的細(xì)節(jié)非常多,只有你想不到的,沒有它沒有的。對于C++程序員來說,STL庫里面的知識也是非常重要的,只要想在技術(shù)這條路線上有長遠(yuǎn)的發(fā)展,那么就一定要掌握它。不管是學(xué)
密碼編碼學(xué)(加密方法的C與C++實現(xiàn)) pdf第二版
密碼編碼學(xué)(加密方法的C與C++實現(xiàn))分分三個部分。第一部分描述密碼學(xué)中的常用算法和數(shù)論算法,以及這些算法的
發(fā)表于 09-25 09:49
?0次下載
C++ STL的概念及舉例
本篇文章是作者本人使用STL 后的一些看法, 對於想要靠此文章學(xué)習(xí)STL, 是不可能的. 建議叁后面介紹的一些書入門.
STL的概念
在STL 中, 大至上分三個主要的
發(fā)表于 08-30 11:39
?1410次閱讀
STL算法在GIS中的應(yīng)用
使用STL 算法實現(xiàn)GIS 算法可以保證它的簡潔和高效該文結(jié)合C++代碼實例抽象出了地理算子的概念應(yīng)用在GIS 算法當(dāng)中通過定制適配器來消除
發(fā)表于 06-28 16:55
?33次下載
C++編程思想第二卷_刁成嘉譯
本書介紹C++實用的編程技術(shù)和最佳的實踐方法,深入探究了異常處理方法和異常安全設(shè)計;介紹C++的字符串、輸入輸出流、STL算法、容器和模板的現(xiàn)代用法,包括模板元編程;解釋多重
發(fā)表于 10-21 17:01
?0次下載
C++課程資料詳細(xì)資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與C++,算法,函數(shù)等
本文檔的主要內(nèi)容詳細(xì)介紹的是C++課程資料資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與C++,算法,函數(shù),概述, C++語言基礎(chǔ),構(gòu)造數(shù)據(jù)類型,數(shù)據(jù)類型,C+
發(fā)表于 07-09 08:00
?18次下載
C語言教程:STL-for-each算法
C語言教程:STL-for-each算法(電源技術(shù)版面費5400)-文檔為C語言教程:STL-for-each
發(fā)表于 09-17 12:42
?3次下載
C++ STL基本概念是什么
STL,英文全稱 standard template library,中文可譯為標(biāo)準(zhǔn)模板庫或者泛型庫,其包含有大量的模板類和模板函數(shù),是 C++ 提供的一個基礎(chǔ)模板的集合,用于完成諸如輸入/輸出、數(shù)學(xué)計算等功能。
C++入門之通用算法
C++ 是一種強大的編程語言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細(xì)介紹 C++
STL內(nèi)容介紹
1 什么是STL? STL(Standard Template Library),即標(biāo)準(zhǔn)模板庫,是一個具有工業(yè)強度的,高效的C++程序庫。它被容納于C++標(biāo)準(zhǔn)程序庫(
評論