vector向量容器
vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组。
vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存。
对于vector容器的容量定义,可以事先定义一个固定大小,然后可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前面插入新元素。
vector容器有两个重要的方法,begin()和end()。begin()返回的是首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器。
创建vector对象
vector<int> v;
(2)指定容器的大小(带一个参数,表示容器的大小)
vector<double> v(10);
(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初值(带两个参数,分别表示容器的大小和每个元素的初值)
vector<int> v(10,0);
尾部元素扩张
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
return 0;
}
上面的代码表示:将1,2,3三个元素从尾部添加到v容器中,现在容器的长度为3,三个元素分别是1,2,3
下表方式访问vector元素
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout<<v[0]<<endl;
v[1] = 10;
cout<<v[1]<<endl;
cout<<v[2]<<endl;
return 0;
}
程序输出:1 10 3
使用迭代器访问vector元素
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3); vector<int>::iterator it;
for(it=v.begin();it<v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
元素的插入
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3); vector<int>::iterator it=v.begin();
v.insert(v.begin(),8);
v.insert(v.begin()+2,9);
v.insert(v.end(),10); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
输出结果是:8 1 9 2 3 10
向量的大小和元素的删除
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
for(int i=0;i<10;i++)
{
v.push_back(i);
}
cout<<"size:"<<v.size()<<endl; vector<int>::iterator it=v.begin();
v.erase(it+1); //删除v[1]
v.erase(it+4,it+7); //删除v[4]~v[5](!!注意此时的数组已经动态调整了)
for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
}
cout<<"\nempty:"<<v.empty()<<endl; v.clear(); cout<<"empty:"<<v.empty()<<endl;
return 0;
}
程序输出:
0 2 3 4 8 9
empty:0
empty:1
使用reverse反向排列算法
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
for(int i=0;i<10;i++)
{
v.push_back(i);
} vector<int>::iterator it=v.begin(); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl; reverse(v.begin(),v.end()); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
}
return 0;
}
输出结果:
9 8 7 6 5 4 3 2 1 0
使用sort算法对向量元素排序
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
bool Comp(const double &a,const double &b)
{
return a>b;
}
int main()
{
vector<double> v;
for(double i=2.0;i>1;i=i-0.1)
{
v.push_back(i);
}
sort(v.begin(),v.end()); vector<double>::iterator it=v.begin(); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
} cout<<endl;
sort(v.begin(),v.end(),Comp); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
} return 0;
}
2 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1
vector向量容器的更多相关文章
- 学习笔记之vector向量容器
今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...
- vector向量容器(常用的使用方法总结)
关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...
- 标准模板库使用参考——vector向量容器
C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...
- vector向量容器元素排序与查找
1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int> ...
- C++STL之vector向量容器
vector向量容器 vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...
- 利用copy函数简单快速输出/保存vector向量容器中的数据
如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...
- vector 向量容器用法祥解
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: ...
- C++ STL vector(向量容器)的使用(附完整程序代码)
一.简单介绍 Vectors 包括着一系列连续存储的元素,其行为和数组类似. 訪问Vector中的随意元素或从末尾加入元素都能够在O(1)内完毕,而查找特定值的元素所处的位置或是在Vector中插入元 ...
- vector向量容器的一些基本操作
#include <vector> #include <iostream> using namespace std; void print(vector<int>& ...
随机推荐
- [转]Socket编程中,阻塞与非阻塞的区别
阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到 ...
- PS更换证件照颜色
PS是我们经常使用的设计软件,在生活中使用的范围也很广,但是对于普通的用户来说,也就是平时给自己的照片美化一下,还有就是做一些证件照.今天和大家分享的是更改证件照的颜色,网上可能有很多,但是个人感觉都 ...
- c++线程同步和通信
一.线程的创建 你也许会说我一直用CreateThread来创建线程,一直都工作得好好的,为什么要用_beginthreadex来代替CreateThread,下面让我来告诉你为什么. 回答一个 ...
- Oracle Stream配置详细步骤
1 引言 Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication.Oracle Stream利用高级队列技 ...
- mybatis-generator的坑
有天发现mybatis-generator不能用,要加什么根项目前缀, 搞到我重新从github下载,然后发现仓库用不了,原来新项目会改我的maven配置(新坑 后来终于明白要在子项目栏使用手脚架,就 ...
- linux用rdate命令实现同步时间
用rdate命令实现同步时间 前两天说到用ntp时间服务器和ntpdate命令同步时间,今天简单记录下用rdate同步时间 http://blog.csdn.net/wyzxg/archive/201 ...
- classpath和环境变量设置
一.简介: 环境变量是操作系统.应用程序.脚本程序等等的指明灯,能够告诉他们需要的资源在哪里.大多数的 系统都有一些预先设置好的环境变量,当然,我们也可以增加自己的环境变量. 为了看看当前系统的环境变 ...
- 在mac上 使用jenkins 执行python文件
1.要选择 [执行 shell]构建
- Spring Batch介绍
简介 SpringBatch 是一个大数据量的并行处理框架.通常用于数据的离线迁移,和数据处理,⽀持事务.并发.流程.监控.纵向和横向扩展,提供统⼀的接⼝管理和任务管理;SpringBatch是Spr ...
- Vue.js:表单
ylbtech-Vue.js:表单 1.返回顶部 1. Vue.js 表单 这节我们为大家介绍 Vue.js 表单上的应用. 你可以用 v-model 指令在表单控件元素上创建双向数据绑定. v-mo ...