1. 什么是STL?
标准模板库(STL),它的基本概念就是把数据和操作分离,含有容器、算法、迭代器组件等。迭代器是容器和算法之间的粘合剂,使任何算法都可以和任何容器进行交互操作。
在STL中体现了泛型程序设计的思想,是以类型参数化的方式实现的(模板)。
STL中的容器:
序列容器:vector string deque list
关联容器:set map multiset multimap
适配容器:stack queue priority_queue(优先队列)
2.Vector的底层是怎样的
vector就是动态数组.
在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放.如果新值>当前大小时才会再分配内存.当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。内部使用allocator类进行内存管理,程序员不需要自己操作内存。对 vector 的任何操作,一旦引起空间重新配置,指向原 vector 的所有迭代器就都失效了。
注:size_t是无符号整数!!!!
template<class _Ty, class _Ax>
class vector: public _Vector_val<_Ty, _Ax> { //varying size array of values
public:
protected:
pointer _Myfirst; // pointer to beginning of array
pointer _Mylast; // pointer to current end of sequence
pointer _Myend; // pointer to end of array
};
Vector提供的函数:
v.begin() v.end() v.size() v.capacity()
v.push_back() v.pop_back()
v.erase(iterator position) v.erase(iterator begin, end) :执行后后面元素自动前移
v.clear()
v.insert(position, size_type n, const &x)