您的位置:首页 > 编程语言 > C语言/C++

c++ vector 的使用和内存机制

2015-04-10 20:04 435 查看
vector 是 c++ 中比较常用的一种数据结构,相当于一个大小在动态变化的数组。 Vectors are sequence containers representing arrays that can change in size. ---引自 http://www.cplusplus.com/reference/vector/vector/ 。 在程序员不知道自己想用多大空间的数组时(数组在创建的同时需要传递它的大小),可以选择使用vector,这样既不会因为使用较大的数组而消耗空间。

一、vector的使用

1.在头文件中添加 #include <vector>

2.定义一个vector

std::vector<int > vct1; (这样类似于声明了一个一维数组)

3.1常用内部元素

push_back: 在动态数组的最后添加一个数据

pop_back: 删除动态数组的最后一个数据

begin: 得到动态数组头的指针 (经常用在遍历动态数组的for()里面 )

end :
得到动态数组最后一个+1的指针 (经常用在遍历动态数组的for()里面 )

max_size : 得到动态数组最大是多大

capacity:
当前动态数组分配的大小

size : 当前动态数组已使用的大小

reserve : 改变当前动态数组被初始分配的大小 (用于用户了解需要申请的数组大小的情况)

erase : 删除当前指针所指的数据

empty : 判断动态数组是否为空

clear : 清空当前动态数组

swap : 与另一个vector交换数据

Iterators:

begin
Return iterator to beginning (public member function )

end
Return iterator to end (public member function )

rbegin
Return reverse iterator to reverse beginning (public member function )

rend
Return reverse iterator to reverse end (public member function )

cbegin
Return const_iterator to beginning (public member function )

cend
Return const_iterator to end (public member function )

crbegin
Return const_reverse_iterator to reverse beginning (public member function )

crend
Return const_reverse_iterator to reverse end (public member function )

Capacity:

size
Return size (public member function )

max_size
Return maximum size (public member function )

resize
Change size (public member function )

capacity
Return size of allocated storage capacity (public member function )

empty
Test whether vector is empty (public member function )

reserve
Request a change in capacity (public member function )

shrink_to_fit
Shrink to fit (public member function )

Element access:

/]operator[]
Access element (public member function )

at
Access element (public member function )

front
Access first element (public member function )

back
Access last element (public member function )

data
Access data (public member function )

Modifiers:

assign
Assign vector content (public member function )

push_back
Add element at the end (public member function )

pop_back
Delete last element (public member function )

insert
Insert elements (public member function )

erase
Erase elements (public member function )

swap
Swap content (public member function )

clear
Clear content (public member function )

emplace
Construct and insert element (public member function )

emplace_back
Construct and insert element at the end (public member function )

Allocator:

get_allocator
Get allocator (public member function )


Non-member function overloads

relational operators
Relational operators for vector (function template )

swap
Exchange contents of vectors (function template )

3.2
具体使用

std::vector<int> vct1;

vct1.clear()
移除容器中所有数据。

vct1.empty() 判断容器是否为空。

vct1.erase(pos) 删除pos位置的数据

vct1.erase(beg,end)
删除[beg,end)区间的数据

vct1.front() 传回第一个数据。

vct1.insert(pos,elem) 在pos位置插入一个elem拷贝

vct1.pop_back() 删除最后一个数据。

vct1.push_back(elem) 在尾部加入一个数据。

vct1.resize(num) 重新设置该容器的大小

vct1.size()
回容器中实际数据的个数。

vct1.begin() 返回指向容器第一个元素的迭代器

vct1.end() 返回指向容器最后一个元素的迭代器

for(int i = 0 ; i < 100 ; i++ )

{

vct1.push_back(i);

}

二、vector的内存
vector里面的元素都是按连续地址存放的(Just like arrays, vectors use contiguous storage locations for their elements),每一个元素都挨着前一个元素存储。当声明一个vector时,会自动分配一个大小,问题是,当当前空间使用完毕,那么新插入的元素就无法存储。
STL容器解决方法是,它会自动增长vector的空间来存储新插入的数据。具体如下,当vector空间不够时,STL会自动的动态的分配一个当前大小1.5~2倍的新内存区,先将原数组复制过去,然后再进行插入操作。 所以,在不超过vector初始大小的情况下,vector的性能和正常数组是一样的,当发生内存重分配时,vector的性能会下降。 需要注意的是vector的内存只增不减,这就是导致当用户定义一个vector<int > vct1后,向里面push_back了100个元素,当erase了前面的99后,这个vct1所占的内存还是100.所有的内存空间只有在析构时才会被系统回收。同理,clear()虽然可以清空所有的元素,但是内存占用并没有被系统回收。
在STL自动重分配内存的过程中,原vector会被析构释放内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: