C++容器之Vector
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:
#include <vector>
vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
using std::vector; vector<int> v;
或者连在一起,使用全名:
std::vector<int> v;
建议使用全局的命名域方式:
using namespace std;
1.vector的声明
vector<ElemType> c; 创建一个空的vector
vector<ElemType> c1(c2); 创建一个vector c1,并用c2去初始化c1
vector<ElemType> c(n) ; 创建一个含有n个ElemType类型数据的vector;
vector<ElemType> c(n,elem); 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;
c.~vector<ElemType>(); 销毁所有数据,释放资源;
2.vector容器中常用的函数。(c为一个容器对象)
c.push_back(elem); 在容器最后位置添加一个元素elem
c.pop_back(); 删除容器最后位置处的元素
c.at(index); 返回指定index位置处的元素
c.begin(); 返回指向容器最开始位置数据的指针
c.end(); 返回指向容器最后一个数据单元的指针+1
c.front(); 返回容器最开始单元数据的引用
c.back(); 返回容器最后一个数据的引用
c.max_size(); 返回容器的最大容量
c.size(); 返回当前容器中实际存放元素的个数
c.capacity(); 同c.size()
c.resize(); 重新设置vector的容量
c.reserve(); 同c.resize()
c.erase(p); 删除指针p指向位置的数据,返回下指向下一个数据位置的指针(迭代器)
c.erase(begin,end) 删除begin,end区间的数据,返回指向下一个数据位置的指针(迭代器)
c.clear(); 清除所有数据
c.rbegin(); 将vector反转后的开始指针返回(其实就是原来的end-1)
c.rend(); 将vector反转后的结束指针返回(其实就是原来的begin-1)
c.empty(); 判断容器是否为空,若为空返回true,否则返回false
c1.swap(c2); 交换两个容器中的数据
c.insert(p,elem); 在指针p指向的位置插入数据elem,返回指向elem位置的指针
c.insert(p,n,elem); 在位置p插入n个elem数据,无返回值
c.insert(p,begin,end) 在位置p插入在区间[begin,end)的数据,无返回值
3.vector中的操作
operator[] 如: c[i];
同at()函数的作用相同,即取容器中的数据。
在上大致讲述了vector类中所含有的函数和操作,下面继续讨论如何使用vector容器:
1.数据的输入和删除。push_back()与pop_back()
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
int i,n;
vector<int> v;
for(i = ;i < ; i++)
{
scanf("%d",&n);
v.push_back(n);//push_back(n)将元素添加到数组最后
}
for(i = ; i < v.size(); i++)
{
printf("%d ",v[i]);
}
printf("\n");
v.pop_back();//pop_back()将数组最后一个元素删除
for(i = ; i < v.size(); i++)
{
printf("%d ",v[i]);
}
printf("\n");
return ;
}
2.元素的访问
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
int i,n;
vector<int> v;
vector<int>::iterator it;//声明一个vector的迭代器
for(i = ; i <; i++)
{
scanf("%d",&n);
v.push_back(n);
} for(i = ; i < v.size(); i++)
{
printf("%d ",v[i]);//第一种方法访问,通过操作[]
}
printf("\n"); for(i = ; i < v.size(); i++)
{
printf("%d ",v.at(i));//第二种方法访问,通过at(index)函数
}
printf("\n");
for(it = v.begin();it != v.end(); it++)
{
printf("%d ",*it);//第三种方法访问,通过迭代器iterator访问
}
printf("\n");
return ;
}
3.排序和查询
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int i,n;
vector<int> v;
vector<int>::iterator it;//声明一个vector的迭代器
for(i = ; i <; i++)
{
scanf("%d",&n);
v.push_back(n);
}
it = find(v.begin(),v.end(),);//进行查找元素3
if(it == v.end())//若无该元素,则返回指向容器最后一个单元
{
printf("该元素不存在于容器中!\n");
}else
{
printf("%d\n",it-v.begin());
}
sort(v.begin(),v.end());//对容器中元素进行排序
reverse(v.begin(),v.end());//颠倒容器中元素顺序
return ;
}
4.二维容器
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
int i,j;
int m;
vector< vector<int> > v;//注意:定义二维容易的时候,最外面两个<>处一定要有空格,否则会报错
vector<int> v1;
for(i = ; i < ; i++)//使用二维容器之前一定要对其进行初始化
{
v.push_back(v1);
}
for(i = ; i < ; i++)
{
for(j = ; j < ; j++)
{
scanf("%d",&m);
v[i].push_back(m);
}
}
printf("%d\n",v.size());
for(i = ; i < v.size(); i++)
{
for(j = ; j < v[i].size(); j++)
{
printf("%d ",v[i][j]);
}
printf("\n");
}
return ;
}
C++容器之Vector的更多相关文章
- [知识点]C++中STL容器之vector
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...
- C++ 序列式容器之vector
什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree ...
- C++STL模板库序列容器之vector
目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
- ACM__容器之vector
今天做题碰到了深搜的题,有一种存图方式需要用到vector,对vector不是很熟悉,回顾了一下 vector都知道是一个容器,但并不准确,它是一个多功能的能够操作多种数据结构和算法的模板类和函数库. ...
- 容器之vector
#include <iostream> #include <vector> #include <string.h> #include <algorithm&g ...
- 顺序容器之vector
最近因为需要,在看C++ primer,哇,感觉这本书真不错,讲的细而且到位,而且大量的练习题,不愧为C++学习的经典书籍.今天看了顺序容器方面的内容,现在汇报一下: 一.什么是vector vect ...
- STL序列容器之vector
一,vector容器简介 1.vector容器的原理 vector是将元素置于一个动态数组中加以管理的容器. 2.vector容器的特点 vector容器可以随机存取元素,支持索引存取(即用数组下标的 ...
- C++序列容器之 vector常见用法总结
一.关于vector 本文默认读者具有一定的c++基础,故大致叙述,但保证代码正确. vector是一个动态的序列容器,相当于一个size可变的数组. 相比于数组,vector会消耗更多的内存以有效的 ...
随机推荐
- spark2.0配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 【转】oracle查询用户表,函数,储存过程,
◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所 ...
- Oracle归档模式和非归档模式
一 什么是Oracle归档模式? Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里.一般数据库至少要有2个联机重做日志 ...
- AdminLTE-2.2.0 学习
这货基于Bootstrap 3(提供了统一的样式,覆盖了默认的),所以官方建议先搞懂Bootstrap 3再说. # 布局 Layout 布局由四个主要部分组成: Wrapper (.wrapper) ...
- IEEE二进制浮点数算术标准学习
看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储, 先简单的做个笔记,后面需要更深入的理解 ...
- Jquery一般操作归纳
一.DOM操作分类 1.DOM Core getElement(s)获得元素 2.HTML-DOM document.对象/操作标签的属性 3.CSS-DOM ...
- sprintf()函数,把数字转换成字符串
char str_2[10]; int a=1234321; sprintf(str_2,"%d",a);
- SQL 列转行的实现
--列转行,逗号拼接指定列的值Oracle中写法:select wmsys.wm_concat(Field1) from TableASQL Server中写法:SELECT STUFF(( SELE ...
- tomcat 性能优化
tomcat 性能优化tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. tomcat内存优化linux修改TOMCAT_HOME/bin/ ...
- I/O知识
1.jdk1.4之前(jdk1.4开始提供了nio)的早起版本,java对I/O的支持并不完善,开发人员开发高性能I/O程序时,面临的问题主要有: 没有缓冲区,I/O性能存在问题 没有 ...