c++ vector学习

参考资料:
cppreference.com

本文代码:
本文源码

](目录)

隐式成员函数

1.operator= (赋值给容器)

可以用 = 来进行 vector 的赋值,赋值后他们是两个不同的东西,即使修改了vec,也不会修改对tempVec,是深拷贝:

vector<int> vec;
vector<int> tempVec;
tempVec = vec;

2.assign (将值赋给容器)

void assign( size_type count, const T& value );

简单来说就是将vector的内容转成countvalue

tempVec.assign(10,6)
/*
输出:
6 6 6 6 6 6 6 6 6 6 
*/

元素访问

3.at (访问指定元素,进行下标检查)

site超出范围的时候会跑出 std::out_of_range 类型异常

vec.at(site)

4.operator[] (访问指定元素,可能出现访问越界)

vec[site]

5.front (访问第一个元素)

vec.front()

6.back (访问最后一个元素)

vec.bakc()

7.data (返回数组第一个元素的地址指针)

返回的是指向第一个元素的指针

vec.data(site)

迭代器

最简单地理解就是操作容器的指针

8.begin/cbegin (返回指向容器第一个元素的迭代器 /常量迭代器)

返回指向第一个元素的迭代器/常量迭代器(指向的内容不能改变,指向谁可以改)

std::vector<int>::iterator itr = vec.begin();
//指向第二个元素
std::cout<<*(++itr)<<std::endl; 

std::vector<int>::const_iterator cItr = vec.cbegin();
//指向第一个元素
std::cout<<*cItr<<std::endl;

//可以这样
cItr = itr;
//不可以这样:*(++cItr)

9.end/cend(返回指向容器尾端的迭代器/常量迭代器)

返回指向最后一个元素的后一个位置的迭代器(最后一个元素的身后),和begin类似,至于cend除了作为vector的结束之外还有什么用就暂时还没想到。

std::vector<int>::iterator itr = vec.end();
//倒数第一个元素
std::cout << *(--itr) << std::endl;

std::vector<int>::const_iterator cItr = vec.cend();
//顺序打印vec
for(itr = vec.beign();i!=cItr;++i){
	std::cout<<*i<<" ";
}

10.rbegin/rcbegin(返回指向容器最后一个元素的迭代器/常量迭代器)

这是一个逆向迭代器,使用 ++ 的时候不是往后移动,而是往前移动,使用 才能往后移动。

std::vector<int>::reverse_iterator itr = vec.rbegin();
//倒数第二个元素
std::cout  << *(++itr) << std::endl;

std::vector<int>::const_reverse_iterator cItr = vec.crbegin();
//最后一个元素
std::cout << *cItr << std::endl;

11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)

end类似,end指向容器最后一个元素的后一个位置,rend指向容器第一个元素的前一个位置,所以我也不知道这个crend的其他作用

std::vector<int>::reverse_iterator itr = vec.rend();
//第一个元素是:
std::cout << *(--itr) << std::endl;

std::vector<int>::const_reverse_iterator cItr = vec.crend();
//逆序打印vec:
for (itr = vec.rbegin(); itr != cItr; ++itr) {
	std::cout << *itr << " ";
}

容量

12.empty (判断容器是否为空)

为空时返回true,非空时返回false

bool empty() 
if (vec.empty()) {
		std::cout << "vec为空!\n";
	}
	else {
		std::cout << "vec不为空!\n";
	}

13.size (返回容器当前元素个数)

vec.size();

14.max_size (返回容器可容纳的最大元素个数)

vec.max_size();

15.reserve (增加容器容纳空间)

将vec的容量增加到大于或等于count,如果count小于当前的已分配的控件大小就不做任何事。

vec.reserve(count);

16.capacity (返回容器当前可容纳的元素个数)

vec.capacity();

17.shrink_to_fit (回收容器未使用的空间)

//假设输出10,vec.size()也是返回10
std::cout << vec.capacity() << std::endl;
//增加容量
vec.reserve(50);
//此时输出50
std::cout << vec.capacity() << std::endl;
//回收空间
vec.shrink_to_fit();
//输出10
std::cout << vec.capacity() << std::endl;

修改器

18.clear (清除容器中的所有元素)

// 假设输出10
std::cout << vec.size() << std::endl;
vec.clear();
// 输出0
std::cout << vec.size() << std::endl;

19.insert (在容器的指定位置插入指定的值)

//插入之前:1 3 5 7 9
//在第3个位置插入4:
tempVec.insert(tempVec.begin() + 3, 4);
//1 3 5 4 7 9

//在第3个位置插入4个5:
tempVec.insert(tempVec.begin() + 3, 4, 5 );
//1 3 5 5 5 5 5 4 7 9

20.emplace (???)

21.erase (移除容器内指定位置的值)

//删除第3个位置的值
tempVec.erase(tempVec.begin()+3);

//删除容器第0到第5个元素(不包括第5个即[0,5))
tempVec.erase(tempVec.begin(), tempVec.begin() + 5);

22.push_back (从容器的尾端添加元素)

//vec: 1 3 5
vec.push_back(7)
//vec: 1 3 5 7

23.emplace_back (???)

24.pop_back (移除容器最后一个元素 )

//vec: 1 3 5 7
vec.pop_back();
//vec: 1 3 5

25.resize (改变容器存储元素个数)

如果num小于容器当前元素个数则只保留容器前num
如果num大于容器当前元素个数则往容器添加元素直至num

//tempVec.size() 为 20
tempVec.resize(10)
//只剩下前10个元素了

//添加到15个元素,用默认值填充
tempVec.resize(15);
//现在tempVec的元素个数为15了,而且后5个是0

//添加到20个元素,用指定值填充
tempVec.resize(20,999);
//现在tempVec的元素个数为20了,而且后5个是999

26.swap (交换两个容器的内容)

//交换前:
//vec:1 3 5 7
//tempVec:2 4 6 8
vec.swap(tempVec)
//交换后:
//vec:2 4 6 8
//tempVec: 1 3 5 7
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值