兰不达表达式
#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(); }