0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++之STL算法(二)

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2023-07-18 14:49 ? 次閱讀

1.sort排序算法

sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred)  --默認為升序排序
形參:_First、_Last --容器的起始和結(jié)束迭代器
	  _Pred --排序規(guī)則,默認為從小到大

示例:

#include 
#include 
#include 
using namespace std;
class Print
{
public:
	void operator()(int val)
	{
		cout vtr;
	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 ());
	for_each(vtr.begin(), vtr.end(), Print());
	cout 
wKgaomS2MleAaM1cAARtD7TUTa0441.png

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 operatorvtr;
	vtr.resize(10);
	for (int i = 0; i < 10; i++)
	{
		vtr[i] = i;
	}
	for_each(vtr.begin(), vtr.end(), Print());
	cout vtr;
	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 p)
	{
		cout 
wKgZomS2MyOAParyAATTtbRgkRM915.png

3.merge合并容器


容器合并:
	merge()實現(xiàn)吧兩個容器合并在一起,存放到第三個容器中。
	注意:merge()合并一定要保證容器元素有序,默認是從小到大的順序。
	merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)  -->默認從小到大
	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 v1;
	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 ());
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin(),greater());
	for_each(v3.begin(), v3.end(), Print());
	cout 
wKgaomS2M5CAHW_ZAAUfDFpZcos785.png

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 operatorvtr;
	vtr.push_back(Person("小王",18));
	vtr.push_back(Person("小劉", 15));
	vtr.push_back(Person("小林", 20));
	for_each(vtr.begin(), vtr.end(), Print());
	cout 
wKgZomS2NDGAIdujAAP94cWoEYY680.png

5.copy元素拷貝

_OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)
形參:_First、_Last --原容器的起始和結(jié)束位置
      _Dest --目標容器的起始位置
該函數(shù)功能類似于重載運算符=功能
#include 
#include 
#include 
void test()
{
	std::vectorvtr, vtr2;
	vtr.push_back("C++");
	vtr.push_back("copy算法");
	vtr.push_back("學習");
	vtr.push_back("案例");	
	std::cout ::iterator p = vtr2.begin(); p != vtr2.end(); p++)
	{
		std::cout 
wKgaomS2NMqASSfmAAOw2IjA5HA706.png

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 vtr;
	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 
wKgaomS2NR6AcbESAAPM0PgQAfQ713.png

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" ::iterator ptr = vtr.begin();ptr != vtr.end();ptr++)
	{
		cout 
wKgaomS2NYWAPTU2AAMPqWUslQk200.png

8.容器互換swap

容器元素互換:
	swap(container v1,container v2);
	將v1和v2的容器元素進行互換,類似于成員函數(shù)swap();
#include 
using namespace std;
#include 
#include 
class Print
{
public:
	void operator()(int val)
	{
		cout vtr1 = { 10,20,30,50 };
	vectorvtr2 = { 10,29,88 };
	cout 
wKgaomS2NeuAN7ZbAAQnGVB6dtc195.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4551

    瀏覽量

    92017
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73301
  • STL
    STL
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    18260
收藏 人收藏

    評論

    相關(guān)推薦

    c語言入門知識STL

    這周終于可以給大家把STL方面的面試題總結(jié)出來了,突然發(fā)現(xiàn)它里面的細節(jié)非常多,只有你想不到的,沒有它沒有的。對于C++程序員來說,STL庫里面的知識也是非常重要的,只要想在技術(shù)這條路線上有長遠的發(fā)展,那么就一定要掌握它。不管是學
    的頭像 發(fā)表于 03-10 09:31 ?996次閱讀

    c++STL算法(三)

    c++STL算法(三)
    的頭像 發(fā)表于 07-18 15:00 ?1070次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b><b class='flag-5'>STL</b><b class='flag-5'>算法</b>(三)

    C++文件操作

    C++文件操作
    的頭像 發(fā)表于 07-21 10:52 ?1019次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    C++零基礎(chǔ)教程之STL集合類算法,輕松上手C++ STL

    編程語言C++語言
    電子學習
    發(fā)布于 :2023年01月14日 12:24:57

    密碼編碼學(加密方法的CC++實現(xiàn)) pdf第

    密碼編碼學(加密方法的CC++實現(xiàn))分分三個部分。第一部分描述密碼學中的常用算法和數(shù)論算法,以及這些算法
    發(fā)表于 09-25 09:49 ?0次下載

    C++ STL的概念及舉例

      本篇文章是作者本人使用STL 后的一些看法, 對於想要靠此文章學習STL, 是不可能的. 建議叁后面介紹的一些書入門.   STL的概念   在STL 中, 大至上分三個主要的
    發(fā)表于 08-30 11:39 ?1369次閱讀

    STL算法在GIS中的應(yīng)用

    使用STL 算法實現(xiàn)GIS 算法可以保證它的簡潔和高效該文結(jié)合C++代碼實例抽象出了地理算子的概念應(yīng)用在GIS 算法當中通過定制適配器來消除
    發(fā)表于 06-28 16:55 ?33次下載

    C++編程思想第卷_刁成嘉譯

    本書介紹C++實用的編程技術(shù)和最佳的實踐方法,深入探究了異常處理方法和異常安全設(shè)計;介紹C++的字符串、輸入輸出流、STL算法、容器和模板的現(xiàn)代用法,包括模板元編程;解釋多重
    發(fā)表于 10-21 17:01 ?0次下載

    C++課程資料詳細資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與C++,算法,函數(shù)等

    本文檔的主要內(nèi)容詳細介紹的是C++課程資料資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與C++,算法,函數(shù),概述, C++語言基礎(chǔ),構(gòu)造數(shù)據(jù)類型,數(shù)據(jù)類型,C+
    發(fā)表于 07-09 08:00 ?18次下載
    <b class='flag-5'>C++</b>課程資料詳細資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與<b class='flag-5'>C++</b>,<b class='flag-5'>算法</b>,函數(shù)等

    C語言教程:STL-for-each算法

    C語言教程:STL-for-each算法(電源技術(shù)版面費5400)-文檔為C語言教程:STL-for-each
    發(fā)表于 09-17 12:42 ?3次下載
    <b class='flag-5'>C</b>語言教程:<b class='flag-5'>STL</b>-for-each<b class='flag-5'>算法</b>

    STL的概述

    C++ STL 是一套功能強大的 C++ 模板類,提供了通用的模板類和函數(shù),這些模板類和函數(shù)可以實現(xiàn)多種流行和常用的算法,關(guān)于 STL 呢,
    的頭像 發(fā)表于 01-20 17:08 ?1208次閱讀
    <b class='flag-5'>STL</b>的概述

    C++STL庫中的容器

    前面跟大家介紹過STL庫,STL主要是由6大部分組成,其中第一個提到的就是容器,容器在介紹STL中小哥有簡單的跟大家介紹過,今天稍微再詳細介紹一下
    的頭像 發(fā)表于 02-21 10:55 ?1023次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b><b class='flag-5'>STL</b>庫中的容器

    C++ STL基本概念是什么

    STL,英文全稱 standard template library,中文可譯為標準模板庫或者泛型庫,其包含有大量的模板類和模板函數(shù),是 C++ 提供的一個基礎(chǔ)模板的集合,用于完成諸如輸入/輸出、數(shù)學計算等功能。
    的頭像 發(fā)表于 02-27 15:56 ?1235次閱讀
    <b class='flag-5'>C++</b> <b class='flag-5'>STL</b>基本概念是什么

    C++入門通用算法

    C++ 是一種強大的編程語言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細介紹 C++
    的頭像 發(fā)表于 05-17 09:40 ?570次閱讀

    STL內(nèi)容介紹

    1 什么是STL? STL(Standard Template Library),即標準模板庫,是一個具有工業(yè)強度的,高效的C++程序庫。它被容納于C++標準程序庫(
    的頭像 發(fā)表于 11-13 11:32 ?634次閱讀
    <b class='flag-5'>STL</b>內(nèi)容介紹