一、标准库的vector类型

vector是同一种类型的对象的集合

vector的数据结构很像数组,能非常高效和方便地访问单个元素

vector是一个类模板(class template)

vector不能存放引用。

template <
class Type,
class Allocator = allocator<Type>
>
class vector

要使用vector必须包含相关头文件

#include <vector>

using std::vector;

vector对象的初始化:

vector类定义了好几种构造函数

vector<T>  v1;

//vector保存类型为T的对象。默认构造函数v1为空

vector<T> v2(v1);// v2是v1的一个副本

vector<T> v3(n, i); //v3包含n个值为i的元素

vector<T> v4(n); //v4含有值初始化的元素的n个副本

vector<T> v5(v1.begin(), v1.end());  // iterating through v1

vector常用成员函数:

resize 和 reserve的区别:

void reserve(size_type n);

(1)如果n大于容器现有的容量(即capacity()),则需要在自由内存区为整个容器重新分配一块更大的连续空间,其大小为sizeof(T)*n,然后将容器内所有有效元素全部复制到新位置(调用拷贝构造函数),最后释放旧位置的所有存储空间并调整容器的成员指针。注意:容器的大小(即size())并没有发生改变。

(2)否则,什么也不做。

void resize(size_type n, const T& c = T());

(1)如果n大于容器当前的大小(即size()),则在容器的末尾插入n-size()个初值为c的元素,如果不指定初值,则用元素类型的默认构造函数来初始化(这可能引起内存重分配以及容器容量的扩张)。

(2)如果n小于容器当前的大小,则从容器的末尾删除size()-n 个元素,但不释放元素本身的内存空间,因此容量不变。

(3)否则,什么也不做。

e.g

vector<char> vec;
printf(”%zd %zd\n”, vec.size(), vec.capacity());
vec.resize(1024);
printf(”%zd %zd\n”, vec.size(), vec.capacity());
vec.resize(1300);
printf(”%zd %zd\n”, vec.size(), vec.capacity());

运行结果:
0 0 # 一开始size() 和capacity() 都是0
1024 1024 # resize(1024) 之后size() 和capacity() 都是1024
1300 2048 # resize(稍大) 之后capacity() 翻倍,相当于reserve(2048)

例程1:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
#include <vector>
#include <iostream>
using namespace std;

typedef vector<int> INTVEC;

//void ShowVec(const INTVEC& v)
//{
//  unsigned int i;
//  for (i=0; i<v.size(); i++)
//  {
//      cout<<v[i]<<" ";
//  }
//  cout<<endl;
//}

//void ShowVec(INTVEC& v)
//{
//  INTVEC::iterator it;
//  for (it=v.begin(); it!=v.end(); ++it)
//  {
//      cout<<*it<<" ";
//  }
//
//  cout<<endl;
//}

void ShowVec(const INTVEC &v)
{
    INTVEC::const_iterator it;
    for (it = v.begin(); it != v.end(); ++it) //所有迭代器都重载了!=运算符,但有些没有重载<运算符。
    {
        cout << *it << " ";
    }

cout << endl;
}

int main(void)
{
    INTVEC v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

ShowVec(v);

return 0;
}

例程2:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

typedef vector<int> INTVEC;

void ShowVec(const INTVEC &v)
{
    INTVEC::const_iterator it;
    for (it = v.begin(); it != v.end(); ++it)
    {
        cout << *it << " ";
    }

cout << endl;
}

int main(void)
{
    INTVEC v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.push_back(3);
    //cout<<v.back()<<endl;
    //v.pop_back();

ShowVec(v);

//v.erase(v.begin()+2);
    //v.erase(v.begin(), v.begin()+2);

v.erase(remove(v.begin(), v.end(), 3), v.end());
    ShowVec(v);

return 0;
}

例程3:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

typedef vector<int> INTVEC;

void ShowVec(const INTVEC &v)
{
    INTVEC::const_iterator it;
    for (it = v.begin(); it != v.end(); ++it)
    {
        cout << *it << " ";
    }

cout << endl;
}

int main(void)
{
    INTVEC v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.push_back(3);

ShowVec(v);

//v.erase(remove(v.begin(), v.end(), 3), v.end());
    INTVEC::iterator it;
    for (it = v.begin(); it != v.end(); /*++it*/)
    {
        if (*it == 3)
        {
            it = v.erase(it);   // erase返回的是当前删除元素的下一个元素
        }
        else
            ++it;
    }
    ShowVec(v);

return 0;
}

参考:

C++ primer 第四版
Effective C++ 3rd
C++编程规范

vector 类简介和例程的更多相关文章

  1. map 类简介和例程

    一.标准库的map类型 使用map得包含map类所在的头文件 template < class Key, class Type, class Traits = less<Key>, ...

  2. string 类简介和例程

    一.标准库string类型 string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作 ,在VC中直接F1查看 template < class C ...

  3. 转载:C++ vector 类学习笔记

    声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...

  4. C++ vector类详解

    转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...

  5. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

  6. Java Vector 类

    Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...

  7. java.util.Stack类简介

    Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用 ...

  8. ImageView类简介

    4.8  图片控件 本节将要介绍的是图片控件ImageView,首先对ImageView类进行简单介绍,然后通过一个案例来说明ImageView的用法. 4.8.1  ImageView类简介 Ima ...

  9. Spring Security——核心类简介——获得登录用户的相关信息

    核心类简介 目录 1.1     Authentication 1.2     SecurityContextHolder 1.3     AuthenticationManager和Authenti ...

随机推荐

  1. Google用不了解决方法(添加gmail用不了的方法)

     1. 获取google最新的ip列表 能够使用工具1: http://ip.chinaz.com/? IP=www.google.com 也能够使用工具2: http://tool.17mon.cn ...

  2. 有用的iOS网站地址

    王巍 (@onevcat) 是一名 iOS 和 Unity3D 开发者,现旅居日本,正在寻求创意之源.http://swifter.tips/http://onevcat.com/2013/02/xc ...

  3. js隐藏表格的一行数据

    1.方法 document.getElementById('customerAccount_tr').style.display="";//缴纳人名称显示 document.get ...

  4. (原创)2. WPF中的依赖属性之二

    1 依赖属性 1.1 依赖属性最终值的选用 WPF属性系统对依赖属性操作的基本步骤如下: 第一,确定Base Value,对同一个属性的赋值可能发生在很多地方.还用Button的宽度来进行举例,可能在 ...

  5. iTextSharp 合并PDF后,无法删除已经合并的单个文件

    private void MergePDFFiles(string[] fileList, string outMergeFile) { List<PdfReader> readerLis ...

  6. Nginx安装及配置文件解释

    安装nginx,还是在mac上面用brew比较方便. 首先,brew install nginx,提示改权限 sudo chown -R $(whoami) /usr/local 然后brew ins ...

  7. HTTPS服务器配置

    一.SSL证书申请 1.确认需要申请证书的域名 2.生成私钥和csr文件 在linux机器上执行以下命令生成私钥 #openssl genrsa -out server.key 2048 在linux ...

  8. 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式

    上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服 ...

  9. (笔试题)数组A中任意两个相邻元素大小相差1,在其中查找某个数。

    题目: 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置. 思路: 很明显,在数组中寻找 ...

  10. Toast.makeText 方法出错 java.lang.RuntimeException

    接手以前同事留下的代码,今天突然出现了一个bug: java.lang.RuntimeException: Can't create handler inside thread that has no ...