vector

vector使用

​ 对于vector,它的存储结构和数组一样,连续空间。对于vector类型,它的数据成员有三个:

iterator start;
iterator finish;
iterator end_of_storage;

​ 其增长方式是两倍增长。由于存储空间连续,vector的迭代器本质上仍然是类型的指针。明白这点,以上三个数据成员就非常好理解。start,finsh分别表示正在使用的空间指针。而end_of_storage则表示已经申请到的空间的末尾。

构造、析构、以及赋值

  • (constructor)
    Construct vector (public member function )构造函数

    依据函数参数的分类 具体函数
    default (1) vector();
    explicit vector (const allocator_type& alloc);
    fill (2) explicit vector (size_type n, const allocator_type& alloc = allocator_type());
    vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());
    range (3) template < class InputIterator>
    vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
    copy (4) vector (const vector& x);
    vector (const vector& x, const allocator_type& alloc);
    move (5) vector (vector&& x);
    vector (vector&& x, const allocator_type& alloc);
    initializer list (6) vector (initializer_list<value_type> il,const allocator_type& alloc = allocator_type());

    Note:

    • 拷贝构造函数(copy,构造函数参数包含vector)需要定义的值类型与拷贝的值类型一致,并且是深拷贝,会开辟新空间。
    • move型构造函数,移动构造函数,C++11新特性,可以减少内存的分配与释放。
  • (destructor)
    Vector destructor (public member function )

  • operator=
    Assign content (public member function )
    copy (1) vector& operator= (const vector& x);
    move (2) vector& operator= (vector&& x);
    initializer list (3) vector& operator= (initializer_list<value_type> il);

  • assign
    range (1) template
    void assign (InputIterator first, InputIterator last);
    fill (2) void assign (size_type n, const value_type& val);
    initializer list(3) void assign (initializer_list<value_type> il);

    普普通通的操作符重载以及赋值函数

元素访问

访问方式 具体函数
at() //带有边界检查的元素访问方式
reference at( size_type pos );
const_reference at( size_type pos ) const;
operator[] reference operator[ ] ( size_type pos );
const_reference operator[ ] ( size_type pos ) const;
front // 访问第一个元素
reference front();
const_reference front() const;
back //访问最后一个元素
reference back();
const_reference back() const;
data //直接访问隐藏的数组,注意与string不同这里有T * 的重载,而string只有返回const T* 的重载
T* data(); (since C++11)
const T* data() const;(since C++11)

迭代器

begin()
cbegin() //const iterator
returns an iterator to the beginning (public member function)
end()
cend() //const iterator
returns an iterator to the end (public member function)
rbegin()
crbegin() //const iterator
returns a reverse iterator to the beginning (public member function)
rend()
crend() //const iterator
returns a reverse iterator to the end (public member function)

容量与大小

Capacity
bool empty() const; checks whether the container is empty (public member function)
检验是否存储的数据为0个,若为0,返回true,否则返回false
size_type size() const; returns the number of elements (public member function)
当前存储的数据大小(个数)
size_type max_size() const; returns the maximum possible number of elements (public member function)
存储该类型的最大数目
void reserve( size_type new_cap ); reserves storage (public member function)
size_type capacity() const; returns the number of elements that can be held in currently allocated storage (public member function)
当前所申请的内存空间大小
void shrink_to_fit();
//(C++11)
reduces memory usage by freeing unused memory (public member function)
这个函数会申请当前大小的空间,并转移数据

vector的修改

Modifiers
void clear(); clears the contents (public member function)
void clear() noexcept;
清除过后,beign()==end(),但是size()==0,capacity()等于原来的空间
insert() inserts elements (public member function)
返回的是插入元素的位置(迭代器)
single element (1)
iterator insert (const_iterator position, const value_type& val);
fill (2)
iterator insert (const_iterator position, size_type n, const value_type& val);
range (3)
template < class InputIterator>
iterator insert (const_iterator position, InputIterator first,InputIterator last)
move (4)
iterator insert (const_iterator position, value_type&& val);
initializer list (5)
iterator insert (const_iterator position, initializer_list<value_type> il);
emplace()
//C++11
constructs element in-place (public member function)
根据要插入的位置,以及各参数,构造一个新元素插入,返回的是插入元素的位置(迭代器)
template< class… Args >
iterator emplace( const_iterator pos, Args&&… args );
erase() erases elements (public member function)
返回的是最后一个被删除元素后一个元素
1.single element
iterator erase( iterator pos );
iterator erase( const_iterator pos );
2.range
iterator erase (const_iterator first, const_iterator last);
iterator erase (const_iterator first, const_iterator last);
push_back() adds an element to the end (public member function)
void push_back (const value_type& val);
void push_back (value_type&& val);
emplace_back()
//C++11
constructs an element in-place at the end (public member function)
template <class… Args>
void emplace_back (Args&&… args);
pop_back() removes the last element (public member function)
void pop_back();
resize() changes the number of elements stored (public member function)
void resize (size_type n);
void resize (size_type n, const value_type& val)
swap() swaps the contents (public member function)
交换两个vector的内容
void swap (vector& x);

Reference

[1]https://www.bilibili.com/video/av45108908

[2]http://www.cplusplus.com/reference/vector/vector/

[3]https://en.cppreference.com/w/cpp/container/vector

原文链接: https://www.cnblogs.com/maricat4/p/14710712.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    vector

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327983

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:30
下一篇 2023年3月1日 下午4:31

相关推荐