十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
vector是最常用的容器之一,功能十分强大,可以储存、管理各种类型的数据。在很多情况下可以用来代替功能比较局限的普通数组,因为我们知道,普通数组只能实现一对一的映射而不能实现一对多的映射,vector就是专门为了解决这个问题而诞生的。vector也可以称为动态数组,因为其大小是根据实时更新而变化的,正因为如此vector显得更加灵活易用。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都做网站、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的玛曲网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!举个例子
小明拥有一根香蕉和两个苹果
小芳拥有一根棒棒糖个三个梨
那么你试着思考一下,应当如何在程序中表示这种结构呢?这就是一对多映射的例子,学完vector就可以轻松解决这个问题了。
vector<储存的类型>容器名
如:
储存int型的值 vector
储存double型的值 vector
储存string型的值 vector
储存结构体或者类的值的值 vector<结构体名>v;
当然也可以定义vector数组:
储存int型的值 vector
储存double型的值 vector
等等,n为数组的大小
//这些都是必会的成员函数
size()//返回返回容器中元素个数
begin()//返回头部迭代器
end()//返回尾部+1迭代器
rbegin()//返回逆首部迭代器
rend()//返回逆尾部-1迭代器
front()//返回首个元素
back()//返回尾部元素
push_back()//在末尾添加一个函数
emplace_back()//和push_back()是一样的作用
pop_back()//弹出最后一个元素
empty()//判断是否为空
insert()//在指定位置插入元素
erase()//在指定位置删除元素
clear()//清空容器
详细解析:
(1)size()
size()是最常用的成员函数了,常用于vector的遍历和元素个数的查询
(2)push_back()
出了初始化以外,push_back()是vector最重要的修改函数了,复杂度为O(1),而insert()的复杂度为O(n),差距明显
(3)front()、back()
查询首元素和未元素,其实通过随机访问,v[0]、v[v.size()-1]是可以达到相同效果的,用front()和back()显得专业点
(4)begin()、end()
通常用来方便排序的,也可以用来遍历,但没必要,通过下标遍历更简单快捷,rbegin()、rend()则可以用来逆序排序
(5)insert()
insert (position, x );
insert (position, n, x );
insert (position, first, last );
插入新的元素,
第一个函数,在迭代器指定的位置前插入值为x的元素
第二个函数,在迭代器指定的位置前插入n个值为x的元素
第三个函数,在迭代器指定的位置前插入另外一个容器的一段序列迭代器first到last
复杂度很高,迫不得已不使用
(6)erase()
erase ( position );
erase (first, last );
删除元素或一段序列
同样地,复杂度很高,迫不得已不使用
示例代码:
#include//c++标准头文件,可以使用cout,cin等标准编译用法
#include//使用vector时需要的头文件
#include//包含许多内置函数,如排序、倒置、交换等函数
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
//遍历函数
void print(auto v){for(auto c:v){cout<vectorv;//定义一个 int型vector
v.emplace_back(3);
v.emplace_back(4);
v.emplace_back(1);
v.emplace_back(2);
cout<<"现在有的元素 :";
print(v);
cout<5,6});
cout<<"插入5、6后: ";
print(v);
cout<
运行结果:
现在有的元素 :3 4 1 2
v.front()=3
v.back()=2
排序后 :1 2 3 4
v.front()=1
v.back()=4
v.size()=4
插入5、6后: 1 2 5 6 3 4
倒置后: 4 3 6 5 2 1
逆序排序后 :6 5 4 3 2 1
v.empty()=0
(v.size()==0)=0
v清空后
v.empty()=1
(v.size()==0)=1
4、vector的三种遍历方法
(1)迭代器iterator代码:
#include#includeusing namespace std;
int main(){vectorv;//定义
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
vector::iterator it;//使用迭代器
for(it=v.begin();it!=v.end();it++){cout<<*it<<' ';
}
}
运行结果:
1 3 2
(2)下标遍历代码:
#include#includeusing namespace std;
int main(){vectorv;//定义
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
for(int i=0;icout<
运行结果:
1 3 2
(3)foreach遍历代码:
#include#includeusing namespace std;
int main(){vectorv;//定义
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
for(int c:v){cout<
运行结果:
1 3 2
两种逆序遍历:
代码:
#include#includeusing namespace std;
int main(){vectorv;//定义
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
// 迭代器法
vector::reverse_iterator it;//使用迭代器
for(it=v.rbegin();it!=v.rend();it++){cout<<*it<<' ';
}
cout<=0;i--){cout<
运行结果:
2 3 1
2 3 1
foreach虽然简单易用,但是不支持逆序遍历
有小伙伴发现dev不能编译部分代码,那是因为dev还未支持c++11,可以看这篇文章解决
dev使用c++11教程
是不是很简单呢?
刚接触肯定会觉得难,多些做题多些用,熟悉了就容易了,兄弟萌,加油!!!
文章尚有不足,欢迎大牛们指正
感谢观看,点个赞吧
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧