小学生学C++编程语法知识(STL容器(2、认识Vector(动态数组)))
STL容器课程第二课 《无限成长盒——认识Vector动态数组》第一幕魔法盒子诞生1、很久很久以前。1程序王国里。小程序员小C已经学会了数组。他十分开心。因为数组可以保存很多很多数据。2例如保存五个数字。int a[5];保存十个数字。int a[10];保存一百个数字。int a[100];3可是……有一天。国王交给了他一个新任务。2、国王的新任务1国王说今天有一些小朋友来报名参加编程比赛。一开始来了3个人。后来又来了5个人。下午。又来了20个人。晚上。又来了100个人。2小C办理登记。他说我用数组开始写下int student[10];开始保存。可是……到了第11个学生。程序停住了。因为盒子满了3、思考一下如果数组只能放10个人。后来来了100个人。怎么办学生通常会回答开一个更大的数组例如int student[100];老师继续问那原来的10个人怎么办是不是还要一个一个复制过去如果后来来了1000个人呢是不是又要重新复制孩子很快就会发现数组好像不太方便。第二幕魔法工程师发明了Vector1、就在大家发愁的时候。程序王国最厉害的工程师来了。他说不用重新开盒子。我发明了一个自己会长大的盒子。它的名字叫Vector动态数组2、为什么叫动态数组因为它和数组一样。也是按顺序保存数据。但是空间不够的时候。它会自己长大3、所以Vector还有一个中文名字动态数组。第三幕请出Vector1、和以前一样。想使用一个工具。必须先把工具请出来。#include iostream #include vector using namespace std;2、以前int a[100];是数组。3、今天vectorint a;就是动态数组。第四幕创建第一个Vectorvectorint score;1、vector表示我要使用动态数组。2、int里面保存整数。3、score变量名字。整个意思就是创建一个可以保存很多整数int的动态数组 vector 的对象它的名字叫score。第五幕往盒子里放东西——push_back()1、现在盒子是空的。放进去一个数字。score.push_back(95);再放。score.push_back(88);继续放。score.push_back(100);这时候。盒子里面就是95 88 1002、第一个完整程序#include iostream #include vector using namespace std; int main() { vectorint score; score.push_back(95); score.push_back(88); score.push_back(100); cout 成绩如下 endl; for (int i 0; i score.size(); i) { cout score[i] ; } return 0; }输出成绩如下 95 88 100第六幕Vector也有下标1、数组这样访问a[2]Vector呢答案一样。score[0] score[1] score[2]2、访问和数组几乎一样这就是Vector最大的优点。第七幕有多少个元素1、数组int a[100];同学们必须记住到底用了几个。例如利用计数器cnt2、而Vector不用。直接调用size函数就知道:score.size()例如cout score.size();输出3是不是方便很多第八幕最后一个同学退出比赛——pop_back()1、假设盒子里面。95 88 100最后一个人退出。怎么办score.pop_back();现在95 88是不是很方便注意只能删除最后一个。第九幕看看第一个和最后一个1、继续介绍两个很有用的成员函数。1取第一个元素front()表示第一个元素。例如cout score.front();输出952取最后一个元素back()例如cout score.back();输出88第十幕盒子空了吗1、想知道里面有没有东西。怎么办直接问。score.empty()2、如果为空。返回true否则false3、例如if(score.empty()) { cout盒子空了; } else { cout还有东西; }第十一幕清空盒子全部不要了。score.clear();一下子全部清空。第十二幕课堂小游戏——猜结果第一题vectorint a; a.push_back(3); a.push_back(5); a.push_back(8); couta.size();答案3第二题a.pop_back(); couta.back();答案5第三题a.clear(); couta.empty();答案1true第十三幕魔法整理机器人——Vector排序sort一、使用sort需要的头文件sort不是Vector里面的成员函数。它属于算法工具algorithm所以。除了#include vector还要再请一位帮手。#include algorithm完整写法#include iostream #include vector #include algorithm using namespace std;二、sort怎么用1、常见写法sort(a.begin(), a.end());意思就是把a里面所有元素排序。同学们只需要记住一句口诀begin() 是开始。end() 是结束。2、所以sort(开始,结束);就是从第一个元素。一直排到最后一个元素。三、vector的排序程序例如#include iostream #include vector #include algorithm using namespace std; int main() { vectorint score; score.push_back(95); score.push_back(60); score.push_back(88); score.push_back(100); score.push_back(75); sort(score.begin(), score.end()); cout 排序后 endl; for(int x : score) { cout x ; } return 0; }运行结果60 75 88 95 100排序前95 60 88 100 75↓sort以后。60 75 88 95 100四、为什么是写begin()和end()1、画图-------------------- 95 60 88 100 75 ↑ ↑ begin() end()2、begin()就是第一个元素的位置。3、end()不是最后一个元素。而是最后一个元素后面的那个位置。4、这样写。sort才能知道我要整理整个盒子。五、课堂实践——整理水果价格1、水果店今天进货。价格分别是12 5 20 8 152、老板说请按价格从便宜到贵排列。3、参考程序#include iostream #include vector #include algorithm using namespace std; int main() { vectorint price; price.push_back(12); price.push_back(5); price.push_back(20); price.push_back(8); price.push_back(15); sort(price.begin(), price.end()); cout 价格排序后 endl; for(int x : price) { cout x ; } return 0; }输出5 8 12 15 20六、课堂实践——学生成绩排名1、老师输入5位同学成绩。例如90 75 100 88 952、要求按照成绩从低到高输出。3、参考程序#include iostream #include vector #include algorithm using namespace std; int main() { vectorint score; for(int i 0; i 5; i) { int x; cin x; score.push_back(x); } sort(score.begin(), score.end()); cout 成绩排名 endl; for(int x : score) { cout x ; } return 0; }例如输入90 75 100 88 95输出75 88 90 95 100八、课堂小游戏——猜排序结果第一题vectorint a; a.push_back(5); a.push_back(2); a.push_back(8); a.push_back(1); sort(a.begin(),a.end());输出1 2 5 8第二题vectorint a; a.push_back(30); a.push_back(10); a.push_back(20); sort(a.begin(),a.end());输出10 20 30第三题vectorint a; a.push_back(7); a.push_back(7); a.push_back(3); a.push_back(5); sort(a.begin(),a.end());输出3 5 7 7sort不会删除重复元素它只是把元素按顺序排列。九、本节课总结今天我们认识了STL中的自动排序机器人——sort()。不用自己写冒泡排序、选择排序等代码只需一行代码就能快速完成排序。记住今天最重要的两句话#include algorithm表示请出排序工具。sort(a.begin(), a.end());表示把整个vector从小到大排序。记忆口诀整理数据不用愁sort出手解烦忧begin()从头走end()排到最后头一行代码排整齐Vector 学习更轻松第十四幕什么时候使用Vector老师问下面这些情况。应该选择数组。还是Vector情况一一年级有50名学生。永远都是50人。答案数组。情况二今天来了多少游客。不知道。答案Vector。情况三保存比赛成绩。人数不断增加。答案Vector。情况四保存棋盘19×19固定大小。答案数组。不是Vector一定比数组好而是要根据问题选择工具。总结今天我们认识了 STL 中最常用的容器——Vector动态数组。它最大的特点是大小可以自动增长。使用方式和数组非常相似。支持下标访问。可以方便地在末尾添加和删除元素。今天学会了 7 个最常用的成员函数成员函数作用生活中的理解push_back(x)在最后放入一个元素往盒子里放一个新玩具pop_back()删除最后一个元素拿走最后放进去的玩具size()元素个数数一数盒子里有几个玩具empty()是否为空看看盒子是不是空的clear()清空所有元素把盒子里的东西全部倒出来front()第一个元素看盒子最前面的玩具back()最后一个元素看盒子最后放进去的玩具记忆口诀数组大小先定好Vector 长大不用愁后面放用push_back()最后删除pop_back()size()数数量empty()看空忙front()看最前back()看最后学会 Vector 真顺手