C++STL序列容器01-Vector

作为cppreference以及cplusplus的补充说明笔记。记录使用STL过程中cppreference文档示例没有举例的地方,以及重要知识点总结。

vector

std::vector 是封装动态数组的顺序容器。故末端操作较快
vector<bool>节省空间的动态 bitset(类模板特化)

构造函数

1.vector构造二维数组
//初始化大小为零的二维数组
std::vector<std::vector<int> > vec;
//初始化row * col二维动态数组,初始化值为0
std::vector<std::vector<int> > vec(row,vector<int>(col,0)); 
int size_row = vec.size(); 		//获取行数
int size_col = vec[0].size(); 	//获取列数

析构函数

解分配vector所用的存储。注意,若元素是指针,则不销毁所指向的对象。

Iterators:

begin,rbegin,cbegin,crbegin

返回迭代器,
r:反向迭代器reverse iterator
c:const_iterator

end,rend,cend,crend

同上。

Capacity

size

返回向量中的元素数

size_type size() const noexcept;

capacity

实际vector所占内存大小,单位是元素数。

size_type capacity() const noexcept;

max_size

返回vector可以容纳的最大元素数

size_type max_size() const noexcept;

resize

n小于size保留前n个。
n大于size小于capacity,扩展容器不扩容。
n大于capacity扩容,并拷贝原vector内容。

void resize (size_type n);
void resize (size_type n, const value_type& val);

reserve

void reserve (size_type n);

resize&reserve区别

reserve()只修改capacity大小,不修改size大小,
resize()既修改capacity大小,也修改size大小(改变size大小同时给增长元素赋值)。

empty

true容器size为0,其余为false

shrink_to_fit(c++11)

使capacity等于size,即释放多余空间。
void shrink_to_fit();

Element access

operator[]

at

边界检查

reference at (size_type n);
const_reference at (size_type n) const;

front

reference front();
const_reference front() const;

back

reference back();
const_reference back() const;

data

size() 为 0 ,则 data() 不一定返回空指针

Modifiers

assign

//拷贝函数,把first到last的值赋值给调用者;(注意区间的闭合)
template <class InputIterator>void assign (InputIterator first, InputIterator last);

//n个x赋值给调用者
void assign (size_type n, const value_type& val);

void assign (initializer_list<value_type> il);

push_back

void push_back (const value_type& val);
void push_back (value_type&& val);

pop_back

void pop_back();

insert

iterator insert (const_iterator position, const value_type& val);

erase

返回最后删除元素的后一个位置,若最后删除的是末尾元素则返回end

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

swap

交换两个vector,长度可不等。

void swap (vector& x);

std::vector<int> foo (3,100);   // three ints with a value of 100
std::vector<int> bar (5,200);   // five ints with a value of 200
foo.swap(bar);

clear

size置0,不改变capacity

void clear() noexcept;

通过交换,可清空并改变capacity

vector<T>().swap(x);   // clear x reallocating 

emplace(C++11)

构造和插入元素
返回指向新放置元素的迭代器。

template <class... Args>
iterator emplace (const_iterator position, Args&&... args);

emplace_back(C++11)

在最后构造并插入元素。无返回值。

template <class... Args>
  void emplace_back (Args&&... args);

emplace&insert

emplace执行效率要高于insert。

当调用insert时,是将对象传递给insert,对象被拷贝到容器中
使用emplace时,是将参数传递给构造函,emplace使用这些参数在容器管理的内存空间中直接构造元素

Allocator

get_allocator

返回与vector关联的分配器对象的副本。

allocator_type get_allocator() const noexcept;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值