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会消耗更多的内存以有效的 ...
随机推荐
- JS鼠标移入,移出事件
该事件的效果就像百度首页的设置选项,当鼠标移入,移出时的效果,废话不多说了,直接上码. <!DOCTYPE html><html lang="en">< ...
- SVN和CVS的区别
对版本控制就有了一定的理解,同时也应该知道SVN与CVS是比较流行的两款SCM工具.那么到底这两款工具有什么区别呢? 1.版本编号方面 例如,我们的版本库为A,其中有文件a,b,c. 在SVN中,新版 ...
- [转] AIX lv 4k偏移量
转自:http://www.aixchina.net/Question/29969 前几天在客户数据库做巡检的时候,在警告日志中发现有如下警告:引用WARNING: You are creating ...
- protobuf初体验
概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...
- Visual studio 生成事件的使用 、xcopy 实现 dll 复制操作、
IF NOT "$(ConfigurationName)"=="publish" exit /B 0if not exist $(TargetPath)publ ...
- Meta http-equiv属性详解(转)
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...
- Getting Started With Hazelcast 读书笔记(第五章,第六章)
第五章 监听 本章应该是Hazelcast的核心机制了,Hazelcast通过注册各种监听器获悉集群中其他应用对数据的修改,成员的加入,退出等. 分为3个层次. 1.EntryListener(对数据 ...
- SQL Server已提交读快照隔离级别的设置
如果要把SQL Server数据库事务隔离级别设置为已提交读快照隔离 如果直接运行下面的语句: ALTER Database [mydbname] SET READ_COMMITTED_SNAPSHO ...
- .net加密解密
.net加密概述 .net加密编程模型 .net加密解密类
- 协程,事件驱动,异步io模型,异步网络框架
协程是一种用户态的轻量级线程,内核不知道它的存在.协程运行于一个线程中,协程的切换是由用户控制的.线程的切换是由cpu来控制的,而协程的切换是由用户控制的.协程的执行时串行的. select/poll ...