vector

vector

动态数组,可随机访问,尾插尾删复杂度为1,中间为n
可自动扩容(为安全起见,扩容后迭代器应重新复制,insert亦是如此)

创建
1.vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};
2.vector<double> values(20);20个元素且全部默认为0 
3.std::vector<double> values(N,data);N个元素全部为data
4.可以使用拷贝构造,
std::vector<char>value1(5, 'c');
std::vector<char>value2(value1);
5.可以传用两个范围来构造(指针迭代器都可以)
int array[]={1,2,3};
std::vector<int>values(array, array+2);//values 将保存{1,2}
std::vector<int>value1{1,2,3,4,5};
std::vector<int>value2(std::begin(value1),std::begin(value1)+3);//value2保存{1,2,3}
reserve

预留容器的空间 reserve (size_type n);

注意:
1.如果已有空间大于n,则什么都不干
2.不会影响已存储元素
3.如果用来扩容,之前的迭代器可能失效(可能在其他地方开辟空间,拷贝过去)
迭代器

end指向的是最后一个元素的下一个位置
实际使用时,其返回值类型都可以使用 auto 关键字代替,编译器可以自行判断出该迭代器的类型。
由 cbegin() 和 cend() 只能访问,不能修改
vector中的迭代器,可以++,-- ,可以+n-n
在这里插入图片描述

访问

front和back,返回第一个和最后一个元素的引用

size和capacity

size表现有元素个数,capacity表最多可以容纳多少元素。

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

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

iterator insert((const_iterator position,first,last)

返回的迭代器指向插入位置,但和原先的position不一定相同

iterator emplace (const_iterator pos, args...);
注意:一次只能插入一个元素,但是效率更高
push_back()和 emplace_back()

用法一样,只是底层实现机制不同,push_back()是先创建一个元素,然后拷贝过去,而emplace是直接找到要插入的内存直接写入。

pop_back()

void pop_back();
只能删除最后一元素,不改变容量,改变大小

erase

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
返回的迭代器指向被删元素的下一个

remove

定义在 头文件中,删除容器中中和指定元素相同的元素。注意:不会改变size和capacity大小
返回最后一个被删元素下一个,类似于end();

删除后虽然不会改变大小和容量,但是会10 30 30 10 10 ?  ?  ?
int main () {
  int myints[] = {10,20,30,30,20,10,10,20};      // 10 20 30 30 20 10 10 20

  // bounds of range:
  int* pbegin = myints;                          // ^
  int* pend = myints+sizeof(myints)/sizeof(int); // ^                       ^

  pend = std::remove (pbegin, pend, 20);         // 10 30 30 10 10 ?  ?  ?
                                                 // ^              ^
  std::cout << "range contains:";
  for (int* p=pbegin; p!=pend; ++p)
    std::cout << ' ' << *p;
  std::cout << '\n';

  return 0;
}
clear

删除所有元素,不会改变其容量

在这里插入图片描述

shrink_to_fit()

将当前 vector 容器的容量缩减至和实际存储元素的个数相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值