【C/C++学院】0830-兰不达表达式/STL算法-操作数据

简介: <p></p> <h2><span style="font-family:宋体; font-size:16pt">兰不达表达式</span><span style="font-family:宋体; font-size:16pt"></span></h2> <pre name="code" class="java">#include<iostream>#include&

兰不达表达式

#include<iostream>
#include<vector>
#include<algorithm>//算法  	lambda表达式,不仅仅适用与array ,也适用于vector

void main1()
{
	std::vector<int> myvector;
	myvector.push_back(11);
	myvector.push_back(22);
	myvector.push_back(33);
	myvector.push_back(3);
	myvector.push_back(4);
	myvector.push_back(5);
	int res=0;//结果
	//&res直接操作一个变量,res等价于返回值,x代表参数,每次充当迭代器指向的元素,大括号就是代码
	std::for_each(myvector.begin(), myvector.end(), [&res](int x){res += x; });
	std::cout << res;
	std::cin.get();
}

void main()
{
	std::vector<int> myvector(5);//分配5个空间,默认初始化为0

	myvector.push_back(1);//增
	myvector.push_back(11);
	myvector.push_back(111);
	myvector.push_back(1111);
	myvector.push_back(2);
	myvector.pop_back();//弹出一个元素,删除最后一个
	myvector.insert(myvector.begin() +1, 999);//插入,
	myvector.erase(myvector.begin()+5);//根据迭代器的位置
	//myvector.clear();//删除所有元素
	for (int i = 0; i < myvector.size(); i++)
	{
		if (1)
		{
			//查询,修改
		}
		std::cout << myvector.at(i) << std::endl;
	}

	system("pause");
}

void main123123()
{
	//可以实现动态无规则数组管理
	std::vector<int> myvetor1;
	myvetor1.push_back(12);
	myvetor1.push_back(13);
	myvetor1.push_back(14);

	std::vector<int> myvetor2;
	myvetor2.push_back(22);

	std::vector<int> myvetor3;
	myvetor3.push_back(32);
	myvetor3.push_back(37);

	std::vector<std::vector<int>> allvecor;
	allvecor.push_back(myvetor1);
	allvecor.push_back(myvetor2);
	allvecor.push_back(myvetor3);
	for (int i = 0; i < allvecor.size(); i++)
	{
		for (int j = 0; j < allvecor[i].size(); j++)
		{
			std::cout <<"  "<< allvecor[i][j];
		}
		std::cout << "\n";
	}
	
	std::cin.get();
}

STL算法-操作数据

Vector

#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
#include <set>
#include <string>

using namespace std;

void main1()
{
	vector<int> myv;
	myv.push_back(1);
	myv.push_back(2);
	myv.push_back(3);
	myv.push_back(11);
	myv.push_back(22);
	myv.push_back(33);

	for_each(myv.begin(), myv.end(), [](int v){ cout << v << endl; });

	auto  i = find(myv.begin(), myv.end(), 23);

	if (i==myv.end())
	{
		std::cout << "23玩失踪";
	} 
	else
	{
		std::cout <<*i;
	}
	
	cin.get();
}

void main2()
{
	vector<int> myv;
	myv.push_back(1);
	myv.push_back(2);
	myv.push_back(3);
	myv.push_back(11);
	myv.push_back(22);
	myv.push_back(33);
	for_each(myv.begin(), myv.end(), [](int v){ cout << v << endl; });
	//auto  i = find_if(myv.begin(), myv.end(), [](int v)->bool{ return (v > 4); });

	auto  i = find_if_not(myv.begin(), myv.end(), [](int v)->bool{ return (v > 4); });
	
	if (i == myv.end())
	{
		std::cout << "玩失踪";
	}
	else
	{
		std::cout << *i;
	}

	cin.get();
}

List

template <class T>
class show
{
public:
	void  operator ()(T &t)
	{
		cout << t << "  ";
	}
};

void main3()
{
	list <int >  list1;
	vector <int > v1;
	list1.push_back(121);
	list1.push_back(12);
	list1.push_back(122);
	list1.push_back(23);

	v1.push_back(121);
	v1.push_back(12);
	v1.push_back(122);
	v1.push_back(23);
	//sort(list1.begin(), list1.end());//排序

	//sort(v1.begin(), v1.end());//排序,简单的排序

	//算法依赖于数据结构(链式,线性),不同的数据结构,算法不一样
	
    fill(v1.begin() + 3, v1.end(), 3);//填充,指定位置数据进行初始化

	for_each(list1.begin(), list1.end(), show<int>());
	cout << "\n";
	for_each(v1.begin(), v1.end(), show<int>());

	cin.get();
}

Multiset 

void main4()
{
	multiset<int > myset;
	myset.insert(3);
	myset.insert(1);
	myset.insert(2);
	myset.insert(1);
	myset.insert(2);
	myset.insert(1);
	myset.insert(2);
	myset.insert(1);

	int i = 0;
	for (auto ib = myset.begin(), ie = myset.end(); ib != ie;ib++,i++)
	{

	}
	cout << i << endl;
	int num = count(myset.begin(), myset.end(), 1);//统计1有多少个节点

	cout << num<< endl;

	cin.get();
}


void  main5()
{
	multiset<int > myset;
	myset.insert(3);
	myset.insert(1);
	myset.insert(2);
	myset.insert(1);
	myset.insert(0);
	myset.insert(1);
	myset.insert(2);
	myset.insert(1);

	for_each(myset.begin(),myset.end(), show< const int>());

    auto  it=	adjacent_find(myset.begin(), myset.end());
	cout << "\n" << *it << endl;
	it++;
	cout << "\n" << *it << endl;
	it++;
	cout << "\n" << *it << endl;
	it++;
	cout << "\n" << *it << endl;
	it = adjacent_find(it, myset.end());//查找相同的数据,可以自己确定位置

	cout << "\n" << *it << endl;
	it++;
	cout << "\n" << *it << endl;	

	cin.get();
}

打乱数据,扑克牌洗牌

template <class T>
class show
{
public:
	void  operator ()(T &t)
	{
		cout << t << "  ";
	}
};
//打乱数据
void  main()
{
	vector<int> v1;
	for (int i = 0; i < 10;i++)
	{
		v1.push_back(i);
	}

	for_each(v1.begin(), v1.end(), show<int>());
	cout << "\n";

	random_shuffle(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), show<int>());
	cout << "\n";
	random_shuffle(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), show<int>());
	cout << "\n";
	random_shuffle(v1.begin(), v1.end());
	for_each(v1.begin(), v1.end(), show<int>());

	cin.get();
}

旋转数据

bool isok(int num)
{
	return (num == 8);
}
//旋转数据
void  main7()
{
	vector<int> v1;
	for (int i =10; i>0; i--)
	{
		v1.push_back(i);
	}
	for_each(v1.begin(), v1.end(), show<int>());

	//partition(v1.begin(), v1.end(), isok);//服务于快速排序法的分区
	//旋转, 头,尾,中间
	rotate(v1.begin(), v1.begin()+8, v1.end());//v1.begin(), v1.begin()+8之间的数据移动到后面
	cout << "\n";
	for_each(v1.begin(), v1.end(), show<int>());


	/*
	rotate(v1.begin(), v1.begin()+1, v1.end());
	cout << "\n";
	for_each(v1.begin(), v1.end(), show<int>());

	rotate(v1.begin(), v1.begin() + 1, v1.end());
	cout << "\n";
	for_each(v1.begin(), v1.end(), show<int>());

	rotate(v1.begin(), v1.begin() + 1, v1.end());
	cout << "\n";
	for_each(v1.begin(), v1.end(), show<int>());
	*/

	cin.get();
}

排序并显示步骤

void  main8()
{
	int a[4] = { 2, 1, 3 ,10};
	do 
	{
		cout << a[0] << " " << a[1] << " " << a[2] <<a[3]<< "\n";

	} while (prev_permutation(a,a+4));//排序并显示步骤

	cin.get();
}

局部排序

void  main10()
{
	vector<char>one;
	one.push_back('B');
	one.push_back('A');
	one.push_back('C');
	one.push_back('Y');
	one.push_back('Z');
	one.push_back('X');
	for_each(one.begin(), one.end(), show<char>());
	cout << "\n";
	for_each(one.begin(), one.end(), show<char>());

	cin.get();
}

取出分数最低的2个学生

#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
#include <set>
#include <string>

using namespace std;

class student
{
public:	 
	string name;
	int score;
public:
	student(string str, int num) :name(str), score(num)
	{

	}
	bool operator <(const student &s1)const
	{
		return this->score < s1.score;
	}
};

//去分数最差的2个人
void  main()
{
	vector<student> ss;
	{
		student s1("银城A", 106);
		ss.push_back(s1);
	}
	{
		student s1("银城B", 101);
		ss.push_back(s1);
	}

	{
		student s1("银城C", 103);
		ss.push_back(s1);
	}

	{
		student s1("银城D", 105);
		ss.push_back(s1);
	}
	partial_sort(ss.begin(), ss.begin() + 2,ss.end());//部分排序

	for (int i = 0; i < 4;i++)
	{
		std::cout << ss[i].name << ss[i].score << "\n";
	}

	cin.get();
}








目录
相关文章
|
2月前
|
机器学习/深度学习 算法 前端开发
别再用均值填充了!MICE算法教你正确处理缺失数据
MICE是一种基于迭代链式方程的缺失值插补方法,通过构建后验分布并生成多个完整数据集,有效量化不确定性。相比简单填补,MICE利用变量间复杂关系,提升插补准确性,适用于多变量关联、缺失率高的场景。本文结合PMM与线性回归,详解其机制并对比效果,验证其在统计推断中的优势。
1083 11
别再用均值填充了!MICE算法教你正确处理缺失数据
|
3月前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
273 1
|
4月前
|
机器学习/深度学习 Dragonfly 人工智能
基于蜻蜓算法优化支持向量机(DA-SVM)的数据多特征分类预测研究(Matlab代码实现)
基于蜻蜓算法优化支持向量机(DA-SVM)的数据多特征分类预测研究(Matlab代码实现)
124 0
|
3月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
380 0
|
5月前
|
传感器 机器学习/深度学习 分布式计算
卡尔曼滤波的多传感器数据融合算法
卡尔曼滤波的多传感器数据融合算法
798 0
|
2月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
2月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
157 0
|
3月前
|
存储 监控 算法
企业电脑监控系统中基于 Go 语言的跳表结构设备数据索引算法研究
本文介绍基于Go语言的跳表算法在企业电脑监控系统中的应用,通过多层索引结构将数据查询、插入、删除操作优化至O(log n),显著提升海量设备数据管理效率,解决传统链表查询延迟问题,实现高效设备状态定位与异常筛选。
138 3
|
3月前
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
102 1
|
5月前
|
程序员 编译器 C++
【实战指南】C++ lambda表达式使用总结
Lambda表达式是C++11引入的特性,简洁灵活,可作为匿名函数使用,支持捕获变量,提升代码可读性与开发效率。本文详解其基本用法与捕获机制。
205 47

热门文章

最新文章