vector(向量容器),是 C++ 中十分实用一个容器。vector 之所以被觉得是一个容器,是由于它可以像容器一样存放各种类型的对象,简单地说,vector 是一个可以存放随意类型(类型可以是int, double, string, 还可以是类)的动态数组,可以添加和压缩数据。

使用 vector 之前。必须包括对应的头文件,vector 属于 std 命名域的,因此须要通过命名限定:

#include <vector>

using std::vector; //using namespace std;

vector 对象的定义和初始化

vector<int> a; //创建一个int类型的空的vector对象,没有不论什么元素
vector<int> b(a); //b 是 a 的副本
vector<string> str(10, "mike"); //10个str,每一个的内容都是"mike"
vector<int> c(10); //创建10个int类型vector对象。相当于c[10],每一个元素的值默觉得0

vector 对象经常使用操作

使用示比例如以下:

#include <iostream>
#include <vector> using std::vector;
using std::cout;
using std::endl;
//using namespace std; int main( )
{
vector<int> a(10); //创建10个int类型vector对象。相当于c[10],每一个元素的值为0 //推断 a 是否为空
if( true == a.empty() ){
cout << "it is empty\n";
}else if(false == a.empty() ){ //结果不为空
cout << "it is not empty\n";
} //返回 a 中元素的个数。
cout << "size = " << a.size() << endl; // 结果为10 // 在 a 的末尾添加一个值为 5 的元素。
// 本来有10个元素。再加入一个。变为11个
a.push_back(5); //下标操作元素。有11个元素。0~10
//打印最后一个元素
cout << a[a.size() -1] << endl; //结果为 5 // 下标法,把全部元素的值打印出来
// vector<int>::size_type 能够当做 int 使用
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << a[i] << ", ";
}
cout << endl; cout << "size before pop_back = " << a.size() << endl;
a.pop_back(); //删除容器最后位置处的元素
cout << "size after pop_back = " << a.size() << endl; // 下标法,给全部元素赋值
for(vector<int>::size_type i = 0; i != a.size(); i++){
a[i] = 5;
} cout << "it is a:\n";
// 把 a 全部元素的值打印出来
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << a.at(i) << ", ";
}
cout << endl; vector<int> b = a; //b是a的复制品 cout << "it is b:\n";
// 把 b 全部元素的值打印出来
for(vector<int>::size_type i = 0; i != a.size(); i++){
cout << b[i] << ", ";
}
cout << endl; a.clear(); //清除全部元素
cout << "size after clear = " << a.size() << endl; return 0;
}

执行结果例如以下:

迭代器操作 vector 对象

除了使用下标来訪问 vector 对象的元素外。标准库还提供了还有一种訪问元素的方法:使用迭代器(iterator) 。迭代器是一种检查容器内元素并遍历元素的数据类型。实际上,vector 对象相当于数组,而迭代器就相当于指针

每种容器类型都定义了自己的迭代器类型,如 vector:

vector<int>::iterator iter;



使用示比例如以下:

#include <iostream>
#include <vector> using std::vector;
using std::cout;
using std::endl;
//using namespace std; int main( )
{
vector<int> v(10, 5); //有10个元素,每一个元素的值都是5 //通过迭代器把全部元素的值打印出来
vector<int>::iterator it;
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl; //通过迭代器给全部元素赋值为1
for( it=v.begin(); it!=v.end(); it++){
*it = 1;
} cout << endl;
//通过迭代器把全部元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl; it = v.begin(); //返回指向容器最開始位置元素的指针(迭代器)
//删除指针it+1指向位置的元素,返回指向下一个元素位置的指针(迭代器)
v.erase(it+1); cout << endl << "after erase:\n";
//通过迭代器把全部元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl; it = v.begin();
//在位置it后插入3个5
v.insert(it, 3, 5); cout << endl << "after insert:\n";
//通过迭代器把全部元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl; return 0;
}

执行结果例如以下:

本教程演示样例代码下载请点此处。

C++入门学习——标准模板库之vector的更多相关文章

  1. ###STL学习--标准模板库

    下面进行STL的学习.希望能了解标准模板库中的常用容器,迭代器,可以自由运用STL以提高编写代码的效率.下面的内容我想以知识点为总结,不再像<Effective C++>那样以章节进行总结 ...

  2. C++之路起航——标准模板库(vector)

    vector(动态数组或向量):动态分配内存空间的线性储存结构. 需要包括头文件<vector> 定义: vector<数据类型> 变量名: Eg: vector<int ...

  3. C++ STL标准模板库(vector)

    //vector的使用 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> using na ...

  4. STL标准模板库之vector

    目录 vector容器 1)什么是vector 2)如何定义 3)常用的Vector函数 1.容量函数 2.增加函数 3.删除函数 4.迭代器 5.访问函数 6.其他函数及操作 7.算法 STL提供了 ...

  5. C++标准模板库之vector

    vector(向量容器),是 C++ 中十分有用一个容器.它能够像容器一样存放各种类型的对象,vector 是一个能够存放任意类型(类型可以是int, double, string, 还可以是类)的动 ...

  6. C++标准模板库(STL)——vector常见用法详解

    vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...

  7. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  8. C++学习笔记——STL(标准模板库)

    1.首先.需要学习C++ 模板的概念 2.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表. ...

  9. 标准模板库(STL)学习指南之sort排序

    对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思 ...

随机推荐

  1. telnet IP不通/sybase central工具无法连接到数据库

    问题描述:客户端sybase central工具无法连接到数据库 服务端操作系统:RHEL5.8_x64,安装sybase-ASE15.7,端口号4112  IP:192.168.1.220  hos ...

  2. 一个简单的ajax对象

    function ajax(options) { //请求参数 options = { //类型 type: options.type || "Post", //地址 url: o ...

  3. asp.net mvc 页面缓存

    在任务中需要实现点击浏览器back按钮,加载的前一页面需要强制刷新. 想要在前端通过js来绑定数据实现,但是觉得太麻烦,还是用另一种方式来解决: 不缓存该页面. 简单易懂: Response.Cach ...

  4. PixelFormat 枚举

    成员名称 说明 Alpha 像素数据包含没有进行过自左乘的 alpha 值. Canonical 默认像素格式,每像素 32 位. 此格式指定 24 位颜色深度和一个 8 位 alpha 通道. Do ...

  5. FineUI模拟树下拉列表

    模拟树的下拉列表 很多时候,我们希望在下拉列表中显示简单树状的层次结构,在菜单设置.机构设置等场景下这个需求尤为突出.也是基于项目需求的考虑,FineUI增加了模拟树的下拉列表的功能,显示效果如下所示 ...

  6. AVT Vimba与OpenCV环境配置

    近来,由于项目需求,需要使用AVT的一款相机采集图像并进行相应的算法处理.环境的配置过程较为复杂,特此记录,以做备忘.也给有需要的小伙伴们一些key point的分享. 搭建环境:Windows7 + ...

  7. WCF入门教程系列四

    一.概述 配置也是WCF编程中的主要组成部分.在 以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址. 服务 ...

  8. eclipse 添加jar包的方式

    参考资料地址:http://blog.csdn.net/mazhaojuan/article/details/21403717

  9. Java中的日期操作

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  10. 如何让checkbox复选框只能单选

    function框架div 如何让checkbox复选框只能单选 在项目开发中遇到一个这样的问题,要让一列复选框架在任何时间段内只能选择一个. 有人说怎么不用单选框了,因为单选框一旦选择了就不能取消选 ...