STL vector的使用(一)基础
一. vector介绍:
vector是C++标准模板库中的部分内容。它是一个多功能的,可以操作多种数据结构和算法的模板类和函数库。vector之所以被觉得是一个容器,是由于它可以像容器一样存放各种类型的对象,简单地说。vector是一个可以存放随意类型的动态数组,可以添加和压缩数据。
二. 使用介绍:
1. 为了能够使用vector。必须在你的头文件里包括以下的代码:
#include <vector>2. vector属于std命名域的。因此须要通过命名限定,例如以下完毕你的代码:
using std::vector; vector<int> vInts;或者连在一起。使用全名:
std::vector<int> vInts;
三. Vector成员函数(Vector Member Functions):
Function |
Description | ||
assign | Erases a vector and copies the specified
elements to the empty vector.1. c.assign(beg,end):[beg; end)区间中的数据赋值给c 2. c.assign(n,elem):将n个elem的拷贝赋值给c。 |
||
at | Returns a reference to the element at a specified location in the vector .1. c.at(idx):传回索引idx所指的数据。假设idx越界,抛出out_of_range。 |
||
back | Returns a reference to the last element of the vector .传回最后一个数据,不检查这个数据是否存在。 |
||
begin |
|
||
capacity | Returns the number of elements that the vector could
contain without allocating more storage.返回容器中数据个数。
|
||
clear | Erases the elements of the vector .移除容器中全部数据。 |
||
empty | Tests if the vector container is empty.推断容器是否为空。
|
||
end | Returns a random-access iterator that points just beyond the end of thevector .指向迭代器中的最后一个数据地址。 |
||
erase | Removes an element or a range of elements in a vector from
specified positions.1. c.erase(pos): 删除pos位置的数据。传回下一个数据的位置。
|
||
front | Returns a reference to the first element in a vector .传回第一个数据。 |
||
get_allocator | Returns an object to the allocator class used by a vector .使用构造函数返回一个拷贝。 |
||
insert | Inserts an element or a number of elements into the vector at
a specified position.1. c.insert(pos,elem):在pos位置插入一个elem拷贝。传回新数据位置。 2. c.insert(pos,n,elem):在pos位置插入n个elem数据。 无返回值。 无返回值。 |
||
max_size | Returns the maximum length of the vector .返回容器中最大数据的数量。 |
||
pop_back | Deletes the element at the end of the vector .删除最后一个数据。
|
||
push_back | Adds an element to the end of the vector .在尾部增加一个数据 |
||
rbegin | Returns an iterator to the first element in a reversed vector .传回一个逆向队列的第一个数据。
|
||
rend |
|
||
resize | Specifies a new size for a vector .又一次指定队列的长度。 |
||
reserve | Reserves a minimum length of storage for a vector object.保留适当的容量。
|
||
size | Returns the number of elements in the vector .返回容器中实际数据的个数。 |
||
swap | Exchanges the elements of two vectors. 1. c1.swap(c2) 2. swap(c1,c2) 都是将c1和c2元素互换。 |
||
vector | Constructs a vector of a specific size
or with elements of a specific value or with a specific allocator or as a copy of some other vector . |
四. Vector操作符(Vector Operators):
Operator |
Description |
operator[] | Returns a reference to the vector element
at a specified position. |
五. 构建Vector(Constructing a Vector)
1. Construct an empty vector to hold objects of type Widget:
vector<Widget> vWidgets; // ------ // | // |- Since vector is a container, its member functions // operate on iterators and the container itself so // it can hold objects of any type.
2. Construct a vector to hold 500 Widgets:
vector<Widget> vWidgets(500);
3. Construct a vector to hold 500 Widgets initialized to 0:
vector<Widget> vWidgets(500, Widget(0));
4. Construct a vector of Widgets from another vector of Widgets:
vector<Widget> vWidgetsFromAnother(vWidgets);
六. 向vector加入数据:
for(int i= 0;i<10; i++) vWidgets.push_back(Widget(i));
七. 获取元素的个数:
非常多时候我们不必要知道vector里面有多少数据,vector里面的数据是动态分配的,使用push_back()的一系列分配空间经常决定于文件或一些数据源。
假设你想知道vector存放了多少数据。你能够使用empty()。获取vector的大小,能够使用size()。比如,假设你想获取一个vector v的大小,但不知道它是否为空,或者已经包括了数据,假设为空想设置为-1,你能够使用以下的代码实现:
int nSize = v.empty() ? -1 : static_cast<int>(v.size());
1 | vector::at() |
2 | vector::operator[] |
vector<int> v; v.reserve(10); for(int i=0; i<7; i++) v.push_back(i); try { int iVal1 = v[7]; // not bounds checked - will not throw int iVal2 = v.at(7); // bounds checked - will throw if out of range } catch(const exception& e) { cout << e.what(); }