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 )
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会被析构释放内存。
一、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 operatorsRelational 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会被析构释放内存。
相关文章推荐
- C++内存使用机制基本概念详解 .
- C++中vector内存扩充机制
- C++内存使用机制基本概念详解
- C++内存使用机制基本概念详解
- C++ vector内存分配机制
- C++ vector 内存分配与回收机制
- C++中使用内存映射文件处理大文件
- 使用内存共享机制进程间通讯
- 全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间
- 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
- c++ vector使用demo
- 全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间
- 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
- C++ STL中用vector 改进内存的再分配
- C++之vector使用范例(转)
- c++ 使用动态内存分配的类需要显式复制构造函数,赋值构造函数,析构函数
- C++对象模型之内存区的使用
- c++的意义。。(个人感觉使用c++可以接触到软件的本质,虽然不能直接开发快速但你可以有自由的感觉,尤其是指针,和直接贴近内存的本质)
- C++中的vector使用范例
- 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件