《我的第一本c++书》学习笔记:STL中的一些通用算法(一)

在用这些算法时,要在头文件中导入:

#include <algorithm>


find_end() :从容器的末尾位置开始查找符合条件的数据

find_first_of() :查找容器中某个元素首次出现的位置

adjacent_find() :查找容器中重复出现的数据

for_each():遍历容器中的数据元素

find():查找特定的数据,或者说是唯一性的数据

find_if:查找特定范围的数据,这些数据在一个范围内


下面列举了后三项代码。

代码如下:

// k.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>


using namespace std;

void addsalary(int& nSalary)
{
	if (nSalary < 2000)
	{
		nSalary *= 1.3;
	}
}

bool ispass(int& n)
{
	return n >= 60;
}


int _tmain(int argc, _TCHAR* argv[])
{
	/*for_each的用法
	vector<int> vecSalary;
	vecSalary.push_back(3200);
	vecSalary.push_back(1983);
	vecSalary.push_back(703);

	for_each(vecSalary.begin(), vecSalary.end(), addsalary);*/

	//find()的用法
	/*vector<string> vecGoods;
	vecGoods.push_back("Eraser");
	vecGoods.push_back("Book");
	vecGoods.push_back("Pen");

	string strGood = "Pencil";
	vector<string>::iterator it = find(vecGoods.begin(), vecGoods.end(), strGood);
	if (it != vecGoods.end())
	{
		cout<<"恭喜本店提供: "<<strGood<<endl;
	} 
	else
	{
		cout<<"抱歉,本店不提供: "<<strGood<<endl;
	}*/

	vector<int> vecScores;
	vecScores.push_back(72);
	vecScores.push_back(54);
	vecScores.push_back(87);

	vector<int>::iterator it = vecScores.begin();
    do 
    {
		it = find_if(it, vecScores.end(), ispass);
			if (it != vecScores.end())
			{
				cout<<"找到及格分数为:"<<*it<<endl;
				++it;
			} 
			else
			{
				break;
			}

    } while (true);


	return 0;
}

以下为remove()和replace_if()算法:

// k.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>


using namespace std;

bool isfall(int& nScore)
{
	return nScore < 60 ? true : false ; 
}


int _tmain(int argc, _TCHAR* argv[])
{
	vector<int> vecScore;
	vecScore.push_back(82);
	vecScore.push_back(-1);
	vecScore.push_back(32);

	//用一个新的itend来表示删除后,容器结束的位置
	vector<int>::iterator itend = remove(vecScore.begin(), vecScore.end(), -1);
    replace_if(vecScore.begin(), itend, isfall, 60);
	cout<<"处理后的成绩:"<<endl;
	for (auto it = vecScore.begin(); it != vecScore.end(); ++it)
	{
		cout<<*it<<endl;
	}


	
	return 0;
}


你可能感兴趣的:(《我的第一本c++书》学习笔记:STL中的一些通用算法(一))