国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++ STL中五個常用算法使用教程及實例講解

C++ STL中五個常用算法使用教程及實例講解

2022-03-07 14:24Domo? C/C++

本文主要介紹了C++ STL算法中常見的五個算法的使用教程并附上了案例詳解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

在C++中使用STL算法都要包含一個算法頭文件 #include<algorithm>

這樣我們才能使用這個STL算法函數

 

sort()排序

  • Sort函數包含在頭文件為#include<algorithm>的c++標準庫中,是一個專門用來排序的高效的函數,我們在解決問題時可以方便快捷的排列順序。
  • sort()函數中有三個參數,(數組首地址;需要結束的地址;排列方式)

第三個排列方式可以不寫,系統會默認為從小到大;

讓我們來看一下真實的案例

1.如果我們想從大到小排序,可以不寫第三個參數

eg:

#include<iostream>

#include<algorithm>//sort()函數所需頭文件 

using namespace std;

int main()

{

	 int a[10]={4,5,9,3,8,2,1,4,0,3};//初始化數組 
	 
	 for(int i=0;i<10;i++)
	 
	 	cout<<a[i];
		cout<<endl; 
	 
	sort(a,a+10);//沒有第三個參數,系統默認從小到大排序 
	 
	 for(int i=0;i<10;i++)
	 
	 {
	 	cout<<a[i];
	}
	 return 0;
	 
}

運行結果

C++ STL中五個常用算法使用教程及實例講解

2.當然,如果我們不想排完整個數組,只想將前幾位從大到小排序也是可以的

Sortt函數的第三個參數可以用這樣的語句告訴程序你所采用的排序原則

less<數據類型>()//從小到大排序

greater<數據類型>()//從大到小排序

eg:

#include<iostream>

#include<algorithm> 

using namespace std;

int main()

{

	 int a[10]={4,5,9,3,8,2,1,4,0,3};//初始化數組 
	 
	 for(int i=0;i<10;i++)
	 
	 	cout<<a[i];
	 	cout<<endl; 
	 
	sort(a,a+10,greater<int>());//沒有第三個參數,系統默認從小到大排序 
	 
	 for(int i=0;i<10;i++)
	 
	 {
	 	cout<<a[i];
	}
	 return 0;
	 
}

 

常用遍歷算法for_each()

for_each()是一個常用的遍歷算法

它的使用除迭代器外還需要包含仿函數或者普通函數來幫助他輸出遍歷結果,

eg:

#include<iostream>

#include<algorithm>

#include<vector>

using namespace std;
//常用遍歷算法for_each

//普通函數
void print01(int val)
{
	cout<<val<<" ";
} 

//仿函數
class print02
{
	public:
		void operator()(int val)
		{
			cout<<val<<" ";
		}
} ;
//測試案例 
void test01()
{
	vector<int>v1;
	for(int i=0;i<10;i++)
	{
		v1.push_back(i);//尾插法 
	}
	for_each(v1.begin(),v1.end(),print01);//利用普通函數遍歷 
	cout<<endl;
	
	for_each(v1.begin(),v1.end(),print02());//利用仿函數遍歷 
	cout<<endl;
} 
int main()
{
	test01();
}

 

常用遍歷算法 搬運transform()

使用方式與for_each()類似,它的使用除迭代器外還需要包含仿函數或者普通函數來幫助他輸出遍歷結果,

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
//常用遍歷算法  搬運transform

//仿函數
class Transform
{
	public:
		int operator()(int val)
		{
			return val;
		}
} ;

//仿函數
class print02
{
	public:
		void operator()(int val)
		{
			cout<<val*10<<" ";
		}
} ;

//測試案例 
void test01()
{
	vector<int>v1;//原容器 
	for(int i=0;i<10;i++)
	{
		v1.push_back(i);//尾插法 
	}
	vector<int>target;//目標容器 
	
	target.resize(v1.size());//提前給target目標容器開辟容量 
	
	transform(v1.begin(),v1.end(),target.begin(),Transform());//返回v1*10 
	
	for_each(target.begin(),target.end(),print02());//利用仿函數遍歷 
}
int main()
{
	test01(); 
} 

 

查找算法find

功能描述:查找指定元素,找到返回指定元素的迭代器,找不到返回結束迭代器end();

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;

//查找內置數據類型 
void test01()
{
	vector<int>v1;
	for(int i=0;i<10;i++)
	{
		v1.push_back(i);//尾插法 
	}
	vector<int>::iterator it=find(v1.begin(),v1.end(),5); 
	if(it==v1.end())
	{
		cout<<"沒有找到"<<endl; 
	}
	else
	cout<<"找到了"<<endl; 
}

int main()
{
	test01(); 
} 

 

刪除操作erase()

刪除a中第一個(從第0個算起)到第二個元素,也就是說刪除的元素從a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)結束

a.erase(a.begin()+1,a.begin()+3);

erase()有三種用法

(1)erase(pos,n); 刪除從pos開始的n個字符,比如erase(0,1)就是刪除第一個字符
(2)erase(position);刪除position處的一個字符(position是個string類型的迭代器)
(3)erase(first,last);刪除從first到last之間的字符(first和last都是迭代器)

 

實例應用

講了這么多的算法,合理的使用它們,會極大簡化我們的代碼量和工作量;

下面我們就用這些算法函數來解決一道題;

C++ STL中五個常用算法使用教程及實例講解

(1)常規解法代碼量大且容易出錯

#include<stdio.h>
#include<string.h>
int main()
{
	char s1[100];
	gets(s1);
	char s2[100];
	gets(s2);
	int len1,len2;//字符串長度
	len1=strlen(s1);
	len2=strlen(s2);
	int i,j,k;//循環變量
	int flag=1;//控制while循環
	int f;//判斷是否刪除
	while(flag)
		for(i=0; i<len1; i++)
		{
          flag=0;//默認s1中不存在符合要求的子串,若遍歷完后flag仍為0則程序結束 
			if(s1[i]==s2[0])//尋找與子串第一個字母相同的字符 
			{
				f=1;//默認從第i個字符開始的子串符合要求 
				for(j=i,k=0; k<len2; j++,k++)//檢驗是否符合要求
					if(s1[j]!=s2[k])//若不符合要求,則f=0,退出for循環的檢驗
					{
						f=0;  
						break;
					}
				if(f)//若f不為0,則進行刪除操作
				{
					flag=1;//即存在符合要求的子串,將flag=1以便再次檢查 
					for(; j<len1; j++,i++)//將后面的字符逐一替換到前面 
						s1[i]=s1[j];
					for(; i<len1; i++)//對后續多余的字符串進行清空 
						s1[i]='\0';
					break;//重新開始for循環,從第一位開始尋找 
				}
			}
			len1=strlen(s1);//重新計算s1的長度,此步影響的用時很小,可有可無
		}
	puts(s1);
	return 0; 
}

(2)STL算法解題

我們使用上面講到的兩種算法來解決這個問題

#include<string>
#include<iostream>
using namespace std;
int main()
{
  string s1, s2;
  getline(cin, s1);            //行輸入
  getline(cin, s2);

  while (s1.find(s2) < s1.length())        //判斷S1中是否還存在S2
  {
      s1=s1.erase(s1.find(s2), s2.length());        //將S1中的S2刪除掉
  }
  cout << s1 << endl;

  return 0;
}

使用STL解決問題高效又快捷

以上就是C++ STL中五個常用算法使用教程及實例講解的詳細內容,更多關于C++ STL算法的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/qq_59708493/article/details/121572956

延伸 · 閱讀

精彩推薦
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
主站蜘蛛池模板: 国产在线精品一区二区 | 久久久区 | 久久精品视频一区 | 欧美成人不卡 | 久草国产视频 | 国产精品区一区二区三含羞草 | 国产精品suv一区二区 | 久草网址| 先锋影音av中文字幕 | 在线一区二区三区四区 | 色888www视频在线观看 | 一特黄a大片免费视频 视频 | 亚洲精品久久久久久国产精华液 | 国产精品久久久久久久久 | 久久久久久久久久久高潮 | 精彩毛片| 久草社区| 日韩av电影在线免费观看 | 黄色地址| 欧美老妇交乱视频 | 中文字幕日本一区二区 | 国产精品久久久 | 日本精品在线观看 | 精品黄色一级片 | 国产一区二区视频免费看 | 免费在线一区二区 | 在线观看亚洲免费视频 | 亚洲精品久久久久久国产 | 久久不卡 | 亚洲一区久久 | 99热少妇| 亚洲国产精品视频一区 | 亚洲毛片在线观看 | 国产精品久久久久久久久 | 久视频在线观看 | 欧美a在线 | 成人av片在线观看 | 一区二区三区国产在线 | 一区二区三区精品视频免费看 | 欧洲精品在线观看 | 性色av一区二区三区红粉影视 |