STLvector

  1. vector容器介绍
  2. 例子
    1. 基本用法
    2. 嵌套用法
  3. include
  4. include

vector容器介绍

vector是顺序容器的一种。vector是可变长的动态数组,支持随机访问迭代器,所有 STL 算法都能对vector进行操作。要使用 vector,需要包含头文件vector。

在vector容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况下也是常数,总体来说速度很快。

在中间插入或删除元素时,因为要移动多个元素,因此速度较慢,平均花费的时间和容器中的元素个数成正比。

在vector容器中,用一个动态分配的数组来存放元素,因此根据下标访问某个元素的时间是固定的,与元素个数无关。

vector容器在实现时,动态分配的存储空间一般都大于存放元素所需的空间。例如,哪怕容器中只有一个元素,也会分配32个元素的存储空间。这样做的好处是,在尾部添加一个新元素时不必重新分配空间,直接将新元素写入适当位置即可。在这种情况下,添加新元素的时间也是常数。

但是,如果不断添加新元素,多出来的空间就会用完,此时再添加新元素,就不得不重新分配内存空间,把原有内容复制过去后再添加新的元素。碰到这种情况,添加新元素所花的时间就不是常数,而是和数组中的元素个数成正比。

至于在中间插入或删除元素,必然涉及元素的移动,因此时间不是固定的,而是和元素个数有关。

vector有很多成员函数,如下表所示:

成员函数 作用
vector() 无参构造函数,将容器初始化为空
vector(int n) 将容器初始化为有 n 个元素
vector(int n, const T &val) 假定元素的类型是T,此构造函数将容器初始化为有n个元素,每个元素的值都是val
vector(iterator first, iterator last) first和last可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将vector容器的内容变成与其他容器上的区间[first,last)—致
void clear() 删除所有元素
bool empty() 判断容器是否为空
void pop_back() 删除容器末尾的元素
void push_back(const T &val) 将 val 添加到容器末尾
int size() 返回容器中元素的个数
T &front() 返回容器中第一个元素的引用
T &back() 返回容器中最后一个元素的引用
iterator insert(iterator i, const T &val) 将val插入迭代器i指向的位置,返回i
iterator insert(iterator i, iterator first, iterator last) 将其他容器上的区间[first, last)中的元素插入迭代器i指向的位置
iterator erase(iterator i) 删除迭代器i指向的元素,返回值是被删元素后面的元素的迭代器
iterator erase(iterator first, iterator last) 删除容器中的区间[first, last)
void swap(vector &v) 将容器自身的内容和另一个同类型的容器v互换

例子

基本用法

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
#include <iostream>
#include <vector> //使用vector需要包含此头文件
using namespace std;
template <class T>
void PrintVector(const vector <T> & v)
typename vector <T>::const_iterator i;

for (i = v.begin(); i != v.end(); ++i)
cout << *i << " ";
cout << endl;
}
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
vector <int> v(a, a + 5);
cout << "1) " << v.end() - v.begin() << endl;
cout << "2)"; PrintVector(v);
v.insert(v.begin() + 2, 13);
cout << "3)"; PrintVector(v);
v.erase(v.begin() + 2);
cout << "4)"; PrintVector(v);
vector<int> v2(4, 100);
v2.insert(v2.begin(), v.begin() + 1, v.begin() + 3);
cout << "5)v2:"; PrintVector(v2);
v.erase(v.begin() + 1, v.begin() + 3);
cout << "6)"; PrintVector(v);
return 0;
}

嵌套用法

```

include

include

using namespace std;
int main()
{
vector\<vector > v(3);
for(int i = 0;i < v.size(); ++i)
for(int j = 0; j < 4; ++j)
v[i].push_back(j);
for(int i = 0;i < v.size(); ++i) {
for(int j = 0; j < v[i].size(); ++j)
cout << v[i][j] << “ “;
cout << endl;
}
return 0;
}```


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yxhlfx@163.com

文章标题:STLvector

本文作者:红尘追风

发布时间:2016-10-05, 14:32:12

原始链接:http://www.micernel.com/2016/10/05/STLvector/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录