C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器

  1. 课程大纲

02实现基本原理

容器,算法,迭代器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

教室:容器

人:元素

教室对于楼:容器

序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器

关联式容器: 教室中 按年龄排座,进去的人已经确定好应该坐在哪了

算法:遍历 查找 删除 统计 …

迭代器:就理解为一个指针

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

STL中容器和算法式是离开的,通过迭代器进行操作

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

03 STL基本概念理论

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

迭代器其实是对指针的封装,是类对象,里面有各种重载

04 string字符串常用操作

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

05 string课堂案例

 

06 vector容器概念

 

vector容器 单口容器

 

vector 类似于一个数组 从尾部操作 效率高 防止从中间插导致移位

push_back

pop_back

 

也提供insert()方法

 

begin()   //返回迭代器

rbegin()  //返回迭代器

 

front() // 返回元素

back() // 返回元素

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

07 vector容器初始化

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

08上午课程回顾

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

09 vector容器常用操作

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

reserve: 为容器预留空间 但空间内不真正创建元素

resize: 改变容器大小 再创建对象(第一个参数是新容器大小,第二个参数是要加入容器中d额新元素 如果这个参数被忽略,就调用元素对象的默认构造函数)

10vector自动增长原理和resize和reserve的区别

int arr[] = {6,8,3.9};

vector<int> v(arr,arr + sizeof(arr) /sizeof(int))

v.insert(v.begin(),100)   // 头部插入元素

vector<int>::iterator pStart = v.begin()

vector<int>::iterator pEnd = v.end()

while(pStart != pEnd){

cout << *pStart << “ “ ;

pStart++;

}

cout << endl;

// 或者可以这样写

for(vector<int>::iterator it = v.begin();it != v.end(); it++)

cout << *it << “ “ ;

……

}

// 删除

int val = v.back();

cout << val << “被删除” << endl;

v.pop_back();

// 从指定位置全删

v.erase(v.begin())

// 区间删除

v.erase(v.begin(),v.end()); // 也等价于 v.clear()

cout << “size:” << v.size() << endl;

11 deque容器概念

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

deque容器的设计

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

11vector容器swap小技巧

Vector自动增长的原理:

一般情况下:

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

12 deque容器基本操作

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

13 deque容器案例_评委打分

C++进阶 STL(1) 第一天  [容器,算法,迭代器]  string容器 vector容器  deque容器

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <string>

#include <vector>

#include <deque>

#include <algorithm>

using namespace std;

/*

评委打分案例(sort算法排序)

1.创建五个选手(姓名,得分)

2.10个评委对5个选手进行打分

得分规则:去除最高分,去除最低分,取出平均分

3.按得分对5名选手进行排名

*/

class Player {

public:

Player(string name, int score) :name(name), score(score) {};

string name;

int score;

private:

};

// 创建选手

void Create_Player(vector<Player> & v)

{

string nameseed = "ABCDE";

for (int i = 0; i < 5; i++)

{

string name = "选手";

name += nameseed[i];

Player p(name, 0); // 创建选手

v.push_back(p);

}

};

// 给sort函数使用的回调函数

bool mycompare(int v1, int v2)

{

return v1 > v2; // 从大到小排序 ==== v1>v2 return true,v1<v2 return false

}

// 设置选手分数

void Set_Player_Score(vector<Player> &pvector)

{

//先对vector进行遍历,vector中存的是一个一个的人

for (vector<Player>::iterator it = pvector.begin(); it != pvector.end(); it++)

{

// 对每一个人都声明了dscore deque(double-end queue)

deque<int> dscore;

// 让10个评委进行打分,随即打分,从后面push_back进去

for (int i = 0; i < 10; i++)

{

int score = 50 + rand() % 50; // 打分 最高100分

dscore.push_back(score);

}

// 排序 sort

sort(dscore.begin(), dscore.end(), mycompare);

dscore.pop_front(); // 去除最高分

dscore.pop_back();  // 去除最低分

// 分数总和

int totalscore = 0;

// 对deque进行遍历 求出分数总和

for (deque<int>::iterator dit = dscore.begin(); dit != dscore.end(); dit++)

{

//cout << *dit << " ";

totalscore += *dit;

}

// 求出平均分

int scoreavg = totalscore / dscore.size();

// 平均分赋给sit->score

(*it).score = scoreavg;

}

}

void Show_Player_Score(vector<Player> & pvector)

{

for (vector<Player>::iterator it = pvector.begin(); it != pvector.end(); it++)

{

cout << "姓名:" << it->name << "分数:" << it->score << endl;

}

cout << endl;

}

int main(void)

{

vector<Player> vPlayer;// 建立vector 存放选手信息

Create_Player(vPlayer); // 在vector中创建5个选手

Set_Player_Score(vPlayer); // 设置选手分数

Show_Player_Score(vPlayer); // 展示选手分数

return 0;

}

上一篇:Android动态禁用或开启屏幕旋转工具


下一篇:禁止屏幕旋转并同时解决以至于导致Activity重启的方法