向量容器属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问)。这一点与c++语言支持的基本数组类型相同,但基本数据类型不是面向对象的。而面向对象的向量是动态结构,他的大小不固定,可以在程序运行时增加或减少。

向量容器可以用来实现队列、栈、列表和其他更加复杂的结构,事实上,向量容器可以用来实习那其他所有容器。使用向量容器之前必须包含头文件vector。

1、向量容器的构造和析构函数

容器类库中的向量容器包含有4中构造函数:

vectot();//默认构造函数,它创建大小为零的向量容器。

vector(size_type n,const T&value=T());//初始化了大小为n的向量,第二个参数是每个对象的初始值,默认为T()构造的对象。

vector(const vector &x);//拷贝构造函数,用常数向量x来初始化此向量

vector(const_iterator first,const_iterator last);//从支持常数迭代器const_iterator的容器中选取一部分来建立一个新的向量。

像所有标准类库的集合和容器一样,向量容器具有自动存储管理功能。程序员不必写程序来分配或释放内存,向量容器可以自动管理内存。当一个向量离开作用域时,向量的析构函数将调用向量中元素的析构函数。向量的析构函数先从容器中移走现有的元素,每个元素都调用自身的析构函数。在元素被移走之后,向量回收分配给这些元素的内存并返回给操作系统。

注意,如果仅从容器中移走元素,并不能收回这些元素占据的内存。它只是调用元素的析构函数。在使用erase()成员函数时也不回收内存,只是从容器中移走元素。

2、使用向量容器

1)访问向量容器信息

向量容器有4个可以用来返回向量容器信息的成员函数:size()、max_size()、capcity()和empty()。原型如下:

size_type size() const;//记录在容器中已经存放了多少元素

size_type max_size() const;//返回记录容器最多可以容纳多少元素

size_type capacity() const;//不必再次分配内存而在容器中最多可以容纳的元素数量

bool empty() const;//如果容器为空则返回布尔型true,否则返回false。

2)向向量容器中放置元素

可以使用如下方法向向量放置元素:构造函数、push_back()方法、Insert()方法、"[]"运算符、"="运算符、swap()函数。函数原型如下:

void push_back(const T& x);//将元素x添加在向量尾部,向量的内存不够时自动请求内存

iterator insert(iterator it,const T& x=T());//把元素x复制到位置it之前

void insert(iterator it,size_type n,const T& x);//把元素x 在位置it之前复制n次

void insert(iterator it,const_iterator first,const_iterator last);//把位于范围[first,last]之间的元素复制到位置it之前

void swap(vector x);//交换当前向量容器与向量x容器中的元素

注意,每次重新分配内存后,向量容器的迭代器和引用都变得无效了。

3)删除向量容器中的元素

void pop_back();//删除向量中的最后一个元素

iterator erase(iterator it);//删除it指向的元素

iterator erase(iterator first,iterator lash);//删除[First,last]范围的所有元素

void clear();//清楚整个向量容器,恢复到无任何元素时的状态,但保留缓冲区

4)访问向量容器中的元素

front()成员函数可以用来返回向量容器中的第一个元素。如果有向量容器A,调用front()将访问向量容器的A[0]元素。Back()成员函数可以用来返回容器的第n-1个元素。表达式A[N]表示相对于容器起始位置的第N个元素。使用"[]"运算符可以直接访问容器中的元素。向量容器支持随机访问迭代器。

5)向量容器的例子

#include<iostream>

#include<iomanip>

#include<vector>

using namespace std;

int main()

{

vector<int> A(10);//用来存放质数的向量,初始状态有10个元素

int n;  //质数范围的上限,运行时输入

int primecount = 0, i, j;

cout << "Enter a value >=2 upper limit for prime numbers:";

cin >> n;

A[primecount++] = 2;//2是一个质数

for (i = 3; i < n; i++)

{

if (primecount == A.size())//如果质数表已满,

A.resize(primecount + 10);

if (i % 2 == 0)//大于2的偶数不是质数,因此略过本次循环的后续部分

continue;   //检测3,5,7,...,i/2是否为i的因子

j = 3;

while (j <= i / 2 && i%j != 0)

j += 2;

if (j>i / 2)  //若上述参数均不为i的因子,则i为质数

A[primecount++] = i;

}

for (i = 0; i < primecount; i++)//输出质数

{

cout << setw(5) << A[i];

if ((i + 1) % 10 == 0) //每输出10个数换行一次

cout << endl;

}

cout << endl;

getchar();

getchar();

}

8、泛型程序设计与c++标准模板库2.2向量容器的更多相关文章

  1. 8、泛型程序设计与c++标准模板库2.4列表容器

    列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历.列表容器是需要按顺序访问的容器.另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器.列表容器还提供了另一种操作- ...

  2. 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器

    顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...

  3. 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语

    有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...

  4. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  5. C++学习笔记53:泛型程序设计与C++标准模板库

    泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...

  6. 8、泛型程序设计与c++标准模板库3.迭代器

    理解迭代器对于理解STL框架并掌握STL的使用至关重要.简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法. 虽然指 ...

  7. 8、泛型程序设计与c++标准模板库2.3双端队列容器

    双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...

  8. 8、泛型程序设计与c++标准模板库2.5容器适配器

    容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类.他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器. 1.标准栈容器 使用STL中的标准栈为程序员提供了一层附加的 ...

  9. 8、泛型程序设计与c++标准模板库5.函数对象

    1.函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性.大多数STL算法可以用一个函数对象作为参数.所谓“函数对象”其实就是一个行为类似函数的对象, ...

随机推荐

  1. 全屏滚动插件之 fullpage.js

    前言:做移动端网页下滑/点击切换到下一页的效果,采用了fullpage,js最新的版本 https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/3.0.4 ...

  2. django配置文件环境分离后celery的启动方式整理

    django项目中,当配置文件分离时: 启动方式1: 硬编码写死在manage.py中: os.environ.setdefault("DJANGO_SETTINGS_MODULE" ...

  3. HTTPSQS(HTTP Simple Queue Service)消息队列

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...

  4. JS获取内联样式

    JS获取内联样式 //获取内联样式 function getCss(obj,attr){//obj:对象,name:style属性 if(obj.currentStyle) { return obj. ...

  5. 分享知识-快乐自己:springboot之thymeleaf (1):简单的thymeleaf例子

    之前搞springboot时,发现spring很推荐thymeleaf,所以看了看学了学,感觉不错,做个笔记先. 做个简单和例子,项目是springboot,所以引入themeleaf相关包 pom. ...

  6. 2017各银行贷款利息表及P2P平台贷款利率比较

    银行贷款利息是多少?2017各银行贷款利息表及P2P平台贷款利率比较 发表时间: 2017-02-17 作者: 一.2017央行贷款基准率 各个银行的贷款利率是以中国银行的人民币贷款基准率为标准进行上 ...

  7. Java_util_02_Java判断字符串是中文还是英文

    做微信开发,使用百度翻译API时,需要指定译文的语种.这就需要我们判断待翻译内容是中文还是英文,若是中文,则翻译成英文,若是英文则翻译成中文. 方法一:字符与字节的长度 依据:一个中文占两个字节,一个 ...

  8. java--Hibernate实现分页查询

    首先在Action类定义当前页的值 private Integer currPage = 1 setter,getter 在spring IOC容器进行注入该变量 在Action类写一个findAll ...

  9. 【leetcode刷题笔记】Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  10. ACM学习历程—FZU2195 检查站点(树形DP || 贪心)

    Description 在山上一共有N个站点需要检查,检查员从山顶出发去各个站点进行检查,各个站点间有且仅有一条通路,检查员下山前往站点时比较轻松,而上山时却需要额外的时间,问最后检查员检查完所有站点 ...