【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();
}








目录
相关文章
|
11天前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
27 5
|
11天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
36 2
|
20天前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
18天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
22天前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
26 1
|
1月前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
51 7
|
2月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
96 4
|
2月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
101 5
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
78 2
|
2月前
|
算法 编译器 C++
【C++11】lambda表达式
C++11 引入了 Lambda 表达式,这是一种定义匿名函数的方式,极大提升了代码的简洁性和可维护性。本文详细介绍了 Lambda 表达式的语法、捕获机制及应用场景,包括在标准算法、排序和事件回调中的使用,以及高级特性如捕获 `this` 指针和可变 Lambda 表达式。通过这些内容,读者可以全面掌握 Lambda 表达式,提升 C++ 编程技能。
131 3