C++之STL

Posted ElevHe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之STL相关的知识,希望对你有一定的参考价值。

仿函数

C++中STL学习笔记——容器之vector

容器——vector

概述
C++中的容器大致分为两类:顺序容器和关联容器。以后会逐一讲解。本文主要讲解顺序容器中的vector。
想要使用vector,需要包含头文件vector,即#include<vector>。vector可以理解为可以动态变换长度的数组。
C++中STL学习笔记——容器之vector

1.定义和初始化

vector<int> vec0;

这种定义只是定义vec0是一个vector,默认大小为0。

vector<int> vec1(10);//初始化vec1,初始化为10个0

这种定义是定义一个vec1,并初始化其长度为10,每个元素默认初始化为0。

vector<int> vec2(10,999);//初始化vec2,初始化为10个999

这种定义是定义一个vec2,并初始化其长度为10,每个元素初始化为999

vector<int> vec2(vec1);//使用vec1初始化vec2,将vec2初始化为何vec1相同vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec3,将vec3初始化为何vec1相同
这两种定义都是将vec1复制给新的vector。
在此处出现了两个函数begin()和end()。有必要说明一下这两个函数的作用。以begin()为例,函数原型分为两类:iterator begin()、const_iterator begin()。功能是返回一个当前vector容器中起始元素的迭代器(可直接理解为首地址指针)。end同理。这里的两个迭代器很重要,以后会用的很多。vector还可以采用下标访问各个元素,可一旦到了后面的容器,就不一定可以使用了,因此,迭代器法访问元素必须要会。

2.常见操作

vec1.push_back(100);//添加元素

该操作表示在vec1末尾添加一个元素100

while(!vec1.empty()){//empty  为空时返回值是1,不空返回值是0     cout<<vec1[vec1.size()-1]<<endl;     vec1.pop_back();//vec1.pop_back删除末尾元素 }

empty()函数表示当前vector是否为空,为空返回1,不空返回0;pop_back()弹出(删除)末尾元素。

vec1.insert(vec1.end(),5,3);//在末尾插入53

insert()函数有三个参量。

cout<<(vec1==vec2)?true:false;  //判断是否相等==、!=、>=、<=...

判断两个vector是否相等。

3.元素获取(遍历方法)

对于vector遍历方法,可以分为两种:下标法和迭代器法。可以思考一下为何支持下标法访问(我的想法为:vector是以数组的方式存取的,因此支持利用下标随机访问)。
//遍历获取元素//1.迭代器法vector<int>::iterator iter = vec2.begin();for(;iter!=vec2.end();iter++){    cout<<*iter<<endl; } //2.下标法 for(int i=0;i<vec2.size();i++){    cout<<vec2[i]<<endl; }

4.以上代码的可执行文件

#include <iostream>#include <vector>using namespace std;//就是一个动态数组int main(){ //1.定义和初始化 vector<int> vec0; vector<int> vec1(10,999);//初始化vec1,初始化为10个999 for(int i=0;i<vec1.size();i++){ vec1[i]=i+1; } vector<int> vec2(vec1);//使用vec1初始化vec2,将vec2初始化为何vec1相同 vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec3,将vec3初始化为何vec1相同
//2.对vector操作 vec1.push_back(100);//添加元素 while(!vec1.empty()){//empty 为空时返回值是1,不空返回值是0 cout<<vec1[vec1.size()-1]<<endl; vec1.pop_back();//vec1.pop_back删除末尾元素 } cout<<endl; vec1.insert(vec1.end(),5,3);//在末尾插入5个3 for(int i=0;i<vec1.size();i++){ cout<<vec1[i]<<endl; } cout<<endl; for(int i=0;i<vec1.size();i++){ vec1[i]=i+1; } //vec1.erase(vec1.begin()+1,vec1.end()-1);//删除之间的元素,其他元素前移 两个元素都是迭代器 cout<<(vec1==vec2)?true:false; //判断是否相等==、!=、>=、<=... cout<<endl;
//遍历获取元素 vector<int>::iterator iter = vec2.begin();//获取迭代器首地址->迭代器就是地址 for(;iter!=vec2.end();iter++){ cout<<*iter<<endl; } //当然了,肯定可以用下标 for(int i=0;i<vec2.size();i++){ cout<<vec2[i]<<endl; } //getchar(); //getchar(); return 0;}
C++中STL学习笔记——容器之vector
C++中STL学习笔记——容器之vector

祝快乐学习,快乐生活!

C++中STL学习笔记——容器之vector


C-J1586886


“在看”我吗?


以上是关于C++之STL的主要内容,如果未能解决你的问题,请参考以下文章

浅谈 C++之 STL

STL之string认识

C++之STL

C++ STL 之 常用算法

C++中STL学习笔记——容器之vector

C++中STL学习笔记——容器之vector