我的vector容器学习小结

1.vector容器元素的初始化方式:
     1.1. vector<T> c;  创建一个名为c的空容器,容器中元素的类型为T
     1.2. vector<T> c2(c); 创建容器c的副本c2,c和c2必须具有相同的容器类型和元素类型
     1.3. vector<T> c(n);  创建有n个元素的容器c,每个元素的初始化由标准库自动执行
     1.4. vector<T> c(n,t); 用n个值为t的元素创建容器c
     1.5. vector<T> c(b,e); 创建容器c,其元素是迭代器b和e标示的范围内元素的副本
     1.6. 程序中的第六种初始化方式其实与第五种初始化方式实质是一样的。因为指针就是迭代器!

vector容器元素的初始化方式代码实现:
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
	vector<int>::iterator iter;
	vector<int> ivec1; //第一种初始化方式:创建一个空的vector
	for (int i = 1; i != 5; ++i)
	{
		ivec1.push_back(i);
	}
	cout << "第一种初始化方式:创建一个空的vector。其输出结果为:" << endl;
	for (iter = ivec1.begin(); iter != ivec1.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	vector<int> ivec2(ivec1);//第二种初始化方式:创建容器ivec1的副本ivec2
	cout << "第二种初始化方式:创建容器ivec1的副本ivec2" << endl;
	for (iter = ivec2.begin(); iter != ivec2.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	vector<int> ivec3(4);//第三种初始化方式:创建一个有4个元素的容器,不指定元素的初始化式,由标准库自动对其进行初始化
	cout << "第三种初始化方式:创建一个有4个元素的容器,不指定元素的初始化式,由标准库自动对其进行初始化" << endl;
	for (iter = ivec3.begin(); iter != ivec3.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	vector<int> ivec4(4, 1);//第四种初始化方式:用4个值为1的元素创建容器ivec4
	cout << "第四种初始化方式:用4个值为1的元素创建容器ivec4" << endl;
	for (iter = ivec4.begin(); iter != ivec4.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	vector<int> ivec5(ivec1.begin(), ivec1.end() - 1);//第五种初始化方式:创建容器ivec5,其元素是由一对迭代器标示的范围内的副本
	cout << "第五种初始化方式:创建容器ivec5,其元素是由一对迭代器标示的范围内的副本" << endl;
	for (iter = ivec5.begin(); iter != ivec5.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	int a[] = { 6, 7, 8, 9, 10, 11 };
	vector<int> ivec6(a, a + 6);//第六种初始化方式:创建容器ivec6,初始化为一段元素的副本
	cout << "第六种初始化方式:创建容器ivec6,初始化为一段元素的副本" << endl;
	for (iter = ivec6.begin(); iter != ivec6.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;
	system("pause");
	return 0;
}

2.vector容器中常用的函数操作:
     1.在vector容器中添加元素的操作:
          1.1 c.push_back(t);  在容器c的尾部添加值为t的元素
          1.2 c.insert(p,t);   在迭代器p所指向的元素前面插入值为t的新元素,返回指向新添加元素的迭代器
          1.3 c.insert(p,n,t);  在迭代器p所指向的元素前面插入n个值为t的新元素。返回void类型
          1.4 c.insert(p,b,e);   在迭代器p所指向的元素前面插入有迭代器b和e标记的范围内的元素。返回void类型
     
     2.vector容器大小的操作:
          2.1 c.size();  返回容器c中的元素个数
          2.2 c.empty();  如果容器c为空,则返回true,否则返回false
     
     3.访问容器中元素的操作:
          3.1 c.back();  返回容器c的最后一个元素的引用。如果c为空,则该操作无定义。
          3.2 c.front();  返回容器c的第一个元素的引用。 如果c为空,则该操作无定义。
          3.3 c[n];       返回下标为n的元素的引用。
          3.4 c.at(n);    返回下标为n的元素的引用。

     4.删除容器中的元素的操作:
          4.1 c.erase(p);  删除迭代器p所指向的元素,返回一个迭代器,它指向被删除元素的后面的元素。
          4.2 c.erase(b,e);  删除迭代器b和e所标记的范围内的所有元素,返回一个迭代器,它指向被删除元素段后面的元素。
          4.3 c.clear();    删除容器c内的所有元素。返回void
          4.4 删除容器内指定的一个元素:我们必须先在容器中找到要删除的元素,然后再调用erase进行删除操作!寻找一个指定的元素使用的是标准库的find算法,具体请看程序中删除ivec容器中指定元素8的操作!

     5.容器的赋值操作:
          5.1 c1=c2;  删除容器c1内的所有元素,然后将c2的元素复制给c1,c1和c2的容器类型以及其元素类型必须相同!
          5.2  c.assign(b,e);   重新设置c的元素:将迭代器b和e标记的范围内所有的元素复制到c中。b和e必须不是指向c中元素的迭代器!
          5.3  c.assign(n,t);    将容器c重新设置为存储n个值为t的元素。
vector容器中常用函数操作的代码实现:
#include<iostream>
#include<vector>
using namespace std;

int main(void)
{
	//往vector容器中添加元素的操作
	vector<int>::iterator iter;
	vector<int> ivec;
	for (int i = 6; i != 11; ++i)
	{
		ivec.push_back(i);//在ivec容器的尾部添加元素6至10
	}
	cout << "使用push_back()在ivec容器的尾部添加元素6至10,输出结果为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	for (int i = 5; i != 0; i--)//在ivec容器的前端依次插入元素1至5
	{
		iter = ivec.begin();
		ivec.insert(iter, i);
	}
	cout << "使用insert(p,t)在ivec容器的前端依次插入元素1至5,输出结果为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	ivec.insert(iter = ivec.begin(), 5, 0);//在ivec容器的前端插入5个0
	cout << "使用insert(p,n,t)在ivec容器的前端插入5个0,输出结果为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	int a[] = { -1, -2, -3, -4, -5 };
	ivec.insert(iter = ivec.begin(), a, a + 5);//在ivec容器的前端插入一段元素
	cout << "在ivec容器的前端插入-1至-5,输出结果为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	//vector容器大小的操作
	if (!ivec.empty())//如果容器不为空
	{
		cout << "ivec容器中元素的个数为:" << ivec.size() << endl;
	}
	cout << endl << endl;

	//访问容器中的元素的操作
	cout << "ivec容器中的第一个元素是:" << ivec.front() << endl;
	cout << "ivec容器中的最后一个元素是:" << ivec.back() << endl;
	cout << "ivec容器中第三个元素是:" << ivec[2] << endl;
	cout << "容器ivec中的元素为(使用at(n)的方法遍历容器中的元素):" << endl;
	for (int i = 0; i != 20; ++i)
	{
		cout << ivec.at(i) << " ";
	}
	cout << endl << endl;

	//删除容器中的元素的操作
	cout << "删除ivec容器中的第一个元素:" << endl;
	ivec.erase(iter = ivec.begin());
	cout << "删除ivec容器中的最后一个元素:" << endl;
	ivec.pop_back();
	cout << "容器ivec中的元素为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;
	cout << "删除ivec容器中的前五个元素:" << endl;
	ivec.erase(ivec.begin(), ivec.begin() + 5);
	cout << "容器ivec中的元素为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;
	cout << "删除ivec中为8的元素:" << endl;
	int searchValue(8);
	iter = find(ivec.begin(), ivec.end(), searchValue);
	if (iter != ivec.end())
	{
		ivec.erase(iter);
	}
	cout << "容器ivec中的元素为:" << endl;
	for (iter = ivec.begin(); iter != ivec.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl << endl;

	//容器的赋值操作
	vector<int>ivec2;
	ivec2 = ivec;//将容器ivec中的元素复制给ivec2
	cout << "将容器ivec中的元素复制给ivec2,容器ivec2中的元素为:" << endl;
	for (iter = ivec2.begin(); iter != ivec2.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl;
	ivec2.assign(5, 0);//将ivec2重新设置为存有5个0的容器
	cout << "将ivec2重新设置为存有5个0的容器,输出结果为:" << endl;
	for (iter = ivec2.begin(); iter != ivec2.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl;
	int b[] = { 10, 11, 12, 13, 14, 15 };
	ivec2.assign(b, b + 6);//将一对迭代器标记的范围内10到15的元素复制到容器ivec2中
	cout << "重新设置容器,将一对迭代器标记的范围内10到15的元素复制到容器ivec2中,输出结果为:" ;
	for (iter = ivec2.begin(); iter != ivec2.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl;
	cout << "删除ivec2容器中的所有元素:" << endl;
	ivec2.clear();
	if (ivec2.empty())
		cout << "ivec2容器为空!" << endl;
	cout << endl << endl;
	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值