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.

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐