参考资料:
cppreference.com
本文代码:
本文源码
目录
- 隐式成员函数
- 1.operator= (赋值给容器)
- 2.assign (将值赋给容器)
- 元素访问
- 3.at (访问指定元素,进行下标检查)
- 4.operator[] (访问指定元素,可能出现访问越界)
- 5.front (访问第一个元素)
- 6.back (访问最后一个元素)
- 7.data (返回数组第一个元素的地址指针)
- 迭代器
- 8.begin/cbegin (返回指向容器第一个元素的迭代器 /常量迭代器)
- 9.end/cend(返回指向容器尾端的迭代器/常量迭代器)
- 10.rbegin/rcbegin(返回指向容器最后一个元素的迭代器/常量迭代器)
- 11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)
- 容量
- 12.empty (判断容器是否为空)
- 13.size (返回容器当前元素个数)
- 14.max_size (返回容器可容纳的最大元素个数)
- 15.reserve (增加容器容纳空间)
- 16.capacity (返回容器当前可容纳的元素个数)
- 17.shrink_to_fit (回收容器未使用的空间)
- 修改器
- 18.clear (清除容器中的所有元素)
- 19.insert (在容器的指定位置插入指定的值)
- 20.emplace (???)
- 21.erase (移除容器内指定位置的值)
- 22.push_back (从容器的尾端添加元素)
- 23.emplace_back (???)
- 24.pop_back (移除容器最后一个元素 )
- 25.resize (改变容器存储元素个数)
- 26.swap (交换两个容器的内容)
隐式成员函数
1.operator= (赋值给容器)
可以用 = 来进行 vector 的赋值,赋值后他们是两个不同的东西,即使修改了vec,也不会修改对tempVec,是深拷贝:
vector<int> vec;
vector<int> tempVec;
tempVec = vec;
2.assign (将值赋给容器)
void assign( size_type count, const T& value );
简单来说就是将vector的内容转成count个value
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