C++容器------vector 的扩容函数使用篇
C++SLTL中六大组建中的容器是很重要的一部分的而容器中的vector也是工作中经常用的先来模仿库里面的vector实现一个自己的Vector:template <class T>class Vector{public:Vector():_start(NULL),_finish(NULL)
·
C++ STL中六大组件中的 容器 是很重要的一部分的
而容器中的vector也是工作中经常用的
现在先来使用以下库里面的vector的几个扩容的函数是如何使用的.
(1)resize()函数的用法
void resize (size_type n, value_type val = value_type());
1.第一个参数为表示你要改变size为n
2.第二个参数为你要将后面的值初始化为val 并给了一个缺省参数
#include <stdio.h>
#include <vector>
#include <iostream>
using namespace std;
//定义一个模板函数,用来打印容器的内容
template<class Container>
void PrintContainer(const Container& con)
{//这里用到了迭代器来实现打印容器种的内容
class Container::const_iterator it = con.begin();
while (it != con.end())
{
cout<<*it<<" ";
++it;
}
cout<<endl;
}
void test()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
cout<<v1.size()<<endl;
cout<<v1.capacity()<<endl;
PrintContainer(v1);
v1.resize(10);
PrintContainer(v1);
}
int main()
{
test();
return 0;
}
例如上面代码执行了结果为:
- 我们看到当参数给定n大于size时,resize 会将size 到n 的范围内的元素都初始化。
再看下面的例子:
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
v1.resize(10);
PrintContainer(v1);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
v1.resize(4);
PrintContainer(v1);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
我们看到,当n 的值小于size 时 resize()函数会将size 缩小,而不会改变capacity的大小
(2)reserve的用法
void reserve (size_type n);
来看下面的代码:
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
v1.reserve(12);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
#####我们看到reserve()函数只是将容量扩大了,并没有改变size 的值
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
v1.reserve(12);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
v1.reserve(4);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
- 我们看到当n 比capacity小时 reserve()函数是不做处理的
(3)我们再看assign的用法
该函数的本意为将容器中的元素进行赋值
template <class InputIterator>
void assign (InputIterator first, InputIterator last);
void assign (size_type n, const value_type& val);
这里以下面的函数为例子来说明
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
v1.assign(12, 6);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
PrintContainer(v1);
####我们看到,assign函数使用时,如果给的n 大于capacity 就会自己进行扩容,不过和resize()函数的扩容不同的是,assign()函数会将n个元素都赋值为val.
更多推荐
已为社区贡献1条内容
所有评论(0)