一、初识Vector容器

学习目标1:学会往Vector容器中添加内置数据类型和Vector容器的遍历

示例:

#include "iostream"
#include <vector>
#include <algorithm>
using namespace std;void print(int val)
{cout << val << endl;
}
void test01()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);//通过迭代器访问容器中的数据vector<int>::iterator itBegin = v.begin(); vector<int>::iterator itEnd = v.end();//遍历方式一while (itBegin!=itEnd){cout << *itBegin << endl;itBegin++;}cout << "第二种遍历方式" << endl;for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << endl;}cout << "第三种遍历方式:用STL中的算法遍历" << endl;for_each(v.begin(), v.end(), print);
}int main01()
{test01();system("pause");return 0;
}

学习目标2:往Vector容器中添加自定义数据类型与遍历

示例:

#include "iostream"
#include <string>
#include <vector>
using namespace std;//自定义数据库 类型class People
{
public://People() {};People(string name, int age){this->m_Name = name;this->m_Age = age;}void ShowPeoleInfo(){cout << "姓名:" << this->m_Name  << "年龄:" << this->m_Age << endl;}string m_Name;int m_Age;
};void testPeople()
{//vector<People> arr;//People p1("小黄", 21);//People p2("小兰", 32);//People p3("小红", 41);//People p4("小名", 22);//People p5("小花", 12);//arr.push_back(p1);//arr.push_back(p2);//arr.push_back(p3);//arr.push_back(p4);//arr.push_back(p5);//cout << "Vector容器的当前容量是:" << arr.capacity() << endl;//cout << "Voctor容器的当前数据个数是:" << arr.size() << endl;遍历容器中的数据//for (vector<People>::iterator it = arr.begin(); it != arr.end(); it++)//{// //cout << "姓名:" << it->m_Name << "年龄:" << it->m_Age << endl;//    cout << "姓名:" << (*it).m_Name<<" " << "年龄:" << (*it).m_Age << endl;//}vector<People*> arr;People p1("小黄", 21);People p2("小兰", 32);People p3("小红", 41);People p4("小名", 22);People p5("小花", 12);arr.push_back(&p1);arr.push_back(&p2);arr.push_back(&p3);arr.push_back(&p4);arr.push_back(&p5);cout << "Vector容器的当前容量是:" << arr.capacity() << endl;cout << "Voctor容器的当前数据个数是:" << arr.size() << endl;//遍历容器中的数据for (vector<People*>::iterator it = arr.begin(); it != arr.end(); it++){//cout << "姓名:" << it->m_Name << "年龄:" << it->m_Age << endl;cout << "姓名:" << (*it)->m_Name << " " << "年龄:" << (*it)->m_Age << endl;}
}
int main()
{testPeople();system("pause");return 0;
}

学习目标3:容器中嵌套容器

示例:

#include "iostream"
#include <vector>
#include <string>using namespace std;//容器中嵌套容器
void test02()
{//1、***********定义一个大容器***********vector<vector<int>> V;//2、创建小容器vector<int> v1;vector<int> v2;vector<int> v3;vector<int> v4;//3、向小容器中添加数据for (int i = 0; i < 4; i++){v1.push_back(i);v2.push_back(i + 1);v3.push_back(i + 2);v4.push_back(i + 3);}//4、把小容器放到大容器中V.push_back(v1);V.push_back(v2);V.push_back(v3);V.push_back(v4);//5、遍历大容器中的所有数据for (vector<vector<int>>::iterator it = V.begin(); it != V.end(); it++){//(*it) ---是指vector<int>//再遍历每一个小容器中的数据cout << "遍历每个小容器的数据" << endl;for (vector<int>::iterator it1 = (*it).begin(); it1 != (*it).end(); it1++){cout << *it1 << endl;}}
}
int main()
{test02();system("pause");return 0;
}

二、vector容器的构造函数

学习目标:学会灵活使用vector容器的几种构造函数

vector容器与数组不同之处在于:空间可以动态扩展

动态扩展:动态扩展并不是在原来的内存空间上扩展,而是寻找(开辟)更大的内存空间,把原来的数据拷贝到新空间,最后把原来的空间释放掉。

vector容器支持随机访问的迭代器。

vector函数原型:

vector<T> v;                         //采用模板实现类实现,默认构造函数

vector(v.begin(),v.end())      //将v[begin(),end())区间的元素拷贝给本身

vector(n,elem)                    //构造函数将n个elem拷贝给本身

vector(const vector &vec)   //拷贝构造函数

示例:

#include "iostream"
#include <vector>#include <string>
using namespace std;
void printVector(vector<int> &v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it<<" ";}cout << endl;
}void test04()
{vector<int> v1;           //1、默认构造参数for (int i = 1; i < 10; i++){v1.push_back(i);}printVector(v1);             //1 2 3 4 5 6 7 8 9//2、通过区间的方式进行构造vector<int> v2(v1.begin(), v1.end());printVector(v2);            //1 2 3 4 5 6 7 8 9//3、n个elem来构造vector<int> v3(10, 100);printVector(v3);           //100 100 100 100 100 100 100 100 100 100//4、拷贝构造vector<int> v4(v3);printVector(v4);         //100 100 100 100 100 100 100 100 100 100
}
int main()
{test04();system("pause");return 0;
}

三、vector容器的赋值操作

学习目标:学会利用几种原型函数给vector容器进行赋值

函数原型:

vector& operator=(const vector &vec)              //重载等号赋值操作

assign(begin,end)                                             //将[begin,end)区间的数据拷贝赋值给本身

assign(n,elem)                                                 //将n个elem拷贝赋值给本身

示例:


#include "iostream"
#include <vector>using namespace std;void PrintVector(vector<int> &v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test05()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}PrintVector(v);//1、等号进行赋值操作cout << "赋值操作 operator=" << endl;vector<int> v2;v2 = v;PrintVector(v2);//2、assignvector<int> v3;v3.assign(v.begin(), v.end());PrintVector(v3);//3、 assign  n个elem进行赋值vector<int> v4;v4.assign(10, 100);PrintVector(v4);
}
int main()
{test05();system("pause");return 0;
}

总结:vector赋值最简单的方式是用等号进行赋值

四、vector容器的容量与大小操作

学习目标:能灵活对vector容器的容量与大小进行操作

函数原型:

empty();                            //判断容器是否为空

capacity();                         //获取容器的容量

size();                                //获取容器中的元素个数

resize(int num);                 //重新指定容器的长度为num,若容器变长,则以默认值填充新位置

//若容器变短,则末尾超出容器长度的元素被删除

resize(int num,elem)         //重新指定容器的长度为num,若容器变长,则以elem填充新位置

//若容器变短,则末尾超出容器长度的元素被删除

示例:

#include "iostream"
#include <vector>using namespace std;void PrintVector06(vector<int> &v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test06()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}PrintVector06(v);         //0 1 2 3 4 5 6 7 8 9if (v.empty())   //为真代表容器为空{cout << "v容器为空!!!!" << endl;}else {cout << "v容器不不不为空!!!!" << endl;cout <<"v容器的容量是:"<< v.capacity() << endl;cout << "v容器的大小是:" << v.size() << endl;}//重新指定v容器的大小v.resize(15);PrintVector06(v);         //0 1 2 3 4 5 6 7 8 9 0 0 0 0 0//v.resize(20,100);PrintVector06(v);         //0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 100 100 100 100 100v.resize(2);PrintVector06(v);          //0 1
}
int main()
{test06();system("pause");return 0;
}

五、vector容器的插入和删除操作

学习目标:能够进行vector容器的插入、删除操作

函数原型:

push_back(elem);

pop_back();                                                       //删除最后一个元素

insert(const_iterator pos,elem);                      //迭代器指向位置pos插入元素elem

insert(const_iterator pos,int count,elem);       //迭代器指向位置pos插入count个元素elem

erase(const_iterator pos);                             //删除迭代器指向的元素

erase(const_iterator start,const_iterator end);//删除迭代器从start到end之间的元素

clear();                                                               //删除容器中所有元素

示例:

#include "iostream"
#include <vector>
using namespace std;void PrintVector07(vector<int> &v)
{if (v.empty()){cout << "容器为空!" << endl;}else {cout << "容器的容量为:"<<v.capacity() << endl;for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}}cout << endl;
}void test07()
{vector<int> v;//尾插法v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);PrintVector07(v);               //10 20 30 40 50//尾删法v.pop_back();PrintVector07(v);              //10 20 30 40//插入法   第一个参数是迭代器v.insert(v.begin(), 1000);PrintVector07(v);             //1000 10 20 30 40v.insert(v.begin(), 2,1000);PrintVector07(v);             //1000 1000 1000 10 20 30 40//删除v.erase(v.begin());PrintVector07(v);             //1000 1000 10 20 30 40//v.erase(v.begin(), v.end());v.clear();PrintVector07(v);             //输出为空}
int main()
{test07();system("pause");return 0;
}

总结:尾插、尾删、插入、删除、清空

六、vector数据的存取

学习目标:对vector容器中的数据进行存取操作

函数原型:

at(int index);                           //返回索引index所指的数据

operator[];                              //返回索引index所指的数据

front();                                   //返回容器中第一个数据元素

back();                                  //返回容器中最后一个数据元素

示例:

#include "iostream"
#include <vector>using namespace std;void PrintVector08(vector<int> &v)
{if (v.empty()){cout << "容器为空!" << endl;}else{cout << "容器的容量为:" << v.capacity() << endl;for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}}cout << endl;
}void test08()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}//1、用[] 来访问容器中的元素for (int i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;//2、利用at方式来访问元素for (int i = 0; i < v.size(); i++){cout << v.at(i) << " ";}cout << endl;//3、获取容器中的第一个元素cout << "v容器中的第一个元素:" << v.front() << endl;//4、获取最后一个元素cout << "v容器的最后一个元素:" << v.back() << endl;
}int main()
{test08();system("pause");return 0;
}

七、vector容器互换

学习目标:实现两容器内的元素互换

函数原型:

swap(vec);          //将vec与本身的元素互换

示例:

#include "iostream"
#include <vector>using namespace std;void PrintVector09(vector<int> &v)
{if (v.empty()){cout << "容器为空!" << endl;}else{cout << "容器的容量为:" << v.capacity() << endl;for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}}cout << endl;
}
void test09()
{vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}cout << "交换前:"<<endl;PrintVector09(v1);vector<int> v2;for (int i =10; i >0; i--){v2.push_back(i);}PrintVector09(v2);cout << "交换后:" << endl;v1.swap(v2);PrintVector09(v1);PrintVector09(v2);
}//实际用途  巧用swap可以收缩内存空间
void test009()
{vector<int> v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为:" << v.capacity() << endl;     //138255cout << "v的大小为:" << v.size() << endl;         //100000v.resize(3);   //重新指定大小cout << "v的容量为:" << v.capacity() << endl;     //138255cout << "v的大小为:" << v.size() << endl;         //3//巧用swap收缩内存vector<int>(v).swap(v);                  //vector<int>(v)匿名对象cout << "v的容量为:" << v.capacity() << endl;     //3cout << "v的大小为:" << v.size() << endl;         //3}
int main09()
{//test09();test009();system("pause");return 0;
}

总结:巧用swap收缩内存        vector<int>(v).swap(v)

八、vector预留空间

预留空间的作用:减少vector在动态扩展容量时的扩展次数

函数原型:

reserve(int len);   //容器预留len个元素长度,预留位置不初始化,元素不可以访问

示例:

#include "iostream"
#include <vector>
using namespace std;void test10()
{std::vector<int> v;v.reserve(100000);int num = 0;int *p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]){p = &v[0];num++;}}cout << "num=" << num << endl;           //未加v.reserve(100000);   30   进行了30次动态扩展cout << "num=" << num << endl;           //加v.reserve(100000);   1   进行了1次动态扩展
}
int main10()
{test10();system("pause");return 0;
}

总结:如果一开始就知道数据量比较大,可以利用reserve预留空间

STL之Vector容器相关推荐

  1. C++STL的vector容器

    C++STL的vector容器 vector容器 vector基本概念 vector构造函数 vector赋值操作 vector容量和大小 vector插入和删除 vector数据存取 vector互 ...

  2. 关于STL中vector容器的一些总结

    第一个总结来自于http://www.jb51.net/article/41648.htm,第二个来自于http://www.cppblog.com/totti1006/archive/2009/09 ...

  3. C++STL中vector容器 assign()函数的用法

    http://blog.sina.com.cn/s/blog_7b3a697301014aam.html assign函数: 函数原型: void assign(const_iterator firs ...

  4. STL 之 list 容器详解

    STL之list容器详解 List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入 ...

  5. STL 之vector详解

    STL之vector容器详解 vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样 ...

  6. java中vector容器,vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...

  7. STL中vector、list、deque和map的区别

    vector 向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy( ...

  8. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  9. STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

     1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) A ...

最新文章

  1. SSM实现个人博客系统
  2. Spring学习笔记-注入实战篇
  3. computer vision(计算机视觉)方面的期刊会议,学术必备
  4. Delphi数据库编程一日通
  5. git仓库创建后,由主支变成开发分支
  6. 保护视力,我写的一个定时提醒的小玩意。
  7. 您的WebApp真的需要jQuery吗?
  8. 不讲武德,只用标签名就能做文本分类
  9. Hibernate Session get()vs load()的区别
  10. 解决方案:分布式ID生成
  11. 使用busybox制作iniramfs
  12. Madagascar的自定义浮点型函数--三角函数和反三角函数
  13. 4月第3周业务风控关注 | 文化部再次审查直播和游戏产品,已下架4939款直播应用...
  14. 小姐姐公开征婚高智商 IT 男:微信号竟要质数解密?
  15. 经典好文!java继承父类注解
  16. MS UC 2013-0-Prepare Tool
  17. (带手机版数据同步)高等院校学院学校类网站源码 政府单位学院学校网站织梦模板
  18. pandas安装了但是import不了
  19. android8临时root,Android8.0怎么root,刷supersu无穷重启
  20. ios 加载大量图片崩溃_iOS加载单张图片导致崩溃的分析

热门文章

  1. 何以解忧,唯有泡妞——我和聊天机器人有个约会
  2. vue实现动态星空效果
  3. Android 线程休眠方法
  4. 四、全国计算机二级Python考试——基本操作题(三)
  5. 计算机应用基础与操作,计算机应用基础教程与操作实例(Windows7+Office2010)/21世纪高等职业教育规划教材·计算机公共课系列...
  6. 利用for 语句求奇数,for语句,求奇数;
  7. Pr视频添加文字及改变文字大小和颜色方法
  8. 一个测试经理的工作总结
  9. 【AI-CPS】【工业机器人】焊接机器人培训PPT,工艺,缺陷,配置,讲得很详细!工业机器人实现柔性制造离不开的核心部件!
  10. python爬取有道词典json报错,求帮助!