标准库vector小结

本文总结了C++标准库中的vector用法,包括如何包含头文件和使用、vector的数据类型定义、各种操作如empty(), size(), push_back(), pop_back(), erase()等,以及迭代器的使用和注意事项。通过实例介绍了迭代器的自增、解引用,以及《C++ Primer》相关习题的解析。" 107092559,1821057,Hadoop与Spark并行度设置与调优,"['Spark', 'Hadoop', 'MapReduce', '任务提交参数', '性能优化']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准库vector

1、包含相应头文件和相应using声明:

#include <vector>
using std::vector;

注:vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。所以,vector<int>、vector<string>都是数据类型。所以,vector<vector<int>> ivec; 是正确的定义,因为vector<int>是一种数据类型。


2、vector对象的定义和初始化

vector<T>  v1;vector保存类型为T的对象。默认构造函数v1为空。
vector<T> v2(v1);v2是v1的一个副本。
vector<T> v3(n, i);v3包含n个值为i的元素。
vector<T> v4(n);v4含有值初始化的元素的n个副本。

3、vector对象的操作

v.empty() 如果 v 为空,则返回 true, 否则返回 false 。
v . size () 返回 v 中元素的个数。
v . push _ back ( t ) 在 v 的末尾增加一个值为 t 的元素。
v [ n ] 返回 v 中位置为 n 的元素。
v1 = v2 把 v1 的元素替换为 v2 中元素的副本。
v1 == v2 如果 v1 与 v2 相等,则返回 true 。
!=, <, <=, >, >= 保持这些操作符惯有的含义。
pop_back()、erase()删除元素:向量容器的成员函数pop_back()可以删除最后一个元素,而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。

v.back() 返回容器中的最后一个元素

vector<int> x;
x.erase(x.begin() + i);
还可以采用通用算法remove()来删除vector容器中的元素,不同的是,采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。


注:下标操作不添加元素



迭代器iterator介绍


1、容器的iterator类型

每种容器都定义了自己的迭代器类型,如vector:

vector<int>::iterator iter;

2、begin和end操作

每种容器都定义了一堆命名为begin和end的函数,用于返回迭代器。

由begin返回的迭代器指向第一个元素。

由end操作返回的迭代器指向vector的“末端元素的下一个”。


3、vector的自增和解引用运算

++iter来是迭代器“向前移动一个位置“。

解引用操作符(*操作符)来访问迭代器所指向的元素:

*iter = 0;

例:

for(vector<int>::iterator iter = vect.begin(); iter != vect.end(); iter++)
{
    *iter = 0;//将所有元素设为0
}

4、const_iterator

//不能修改其值的迭代器
vector<int>::const_iterator 
//迭代器的值不能被改变(初始化时必须指向固定元素)
const vector<int>::iterator

5、迭代器的算术操作

iter + n
iter - n
产生新的迭代器,其位置在iter所指元素之前(加)或之后(减)n个元素的位置。

iter1 - iter2
计算两个迭代器对象的距离。该距离是名为difference_type的signed类型的值。

注:没有两个迭代器的相加操作,所以以下操作时错的:

//如采用下面的方法来计算mid
vector<int>::iterator mid=(vi.begin()+vi.end())/2
//将两个迭代器相加的操作是未定义的,因此用这种方法计算mid会出现编译错误 

正确做法:

//用迭代器算术操作,初始化mid,使其指向vi中最靠近正中间的元素
vector<int>::iterator mid=vi.begin()+vi.size()/2;
vi.begin()与vi.end()返回的是迭代器。vi.size()返回的是元素个数。

附《C++ Primer 中文版(第4版)》习题3.13

/************************************************************************/
/* 读一组整数到vector对象,计算并输出每对相邻元素的和,如果读入元素个数为
奇数,则提示用户最后一个元素没有求和,并输出其值。                      */
/************************************************************************/
#include <iostream>
#include <vector>
#include<string>

using namespace std;
using std::vector;
using std::string;

int main()
{
	vector<int> vI;
	int nInput;
	/*读入一组数*/
	char c;
	cout<<"输入一组数,数之间用空格隔开:"<<endl;
	while ((c=cin.get())!= '\n')
	{
		cin.unget();
		cin>>nInput;
		vI.push_back(nInput);
	}
	/*求相邻数的和*/
	for (vector<int>::size_type ix = 0;ix < vI.size()-1;ix += 2)
	{		
		
		cout<<vI[ix]+vI[ix+1]<<" ";
	}
	cout<<"\n";
	if (0 != vI.size()%2)
	{
		cout<<"最后一位没有求和"<<endl;
	}
	return 0;
}

习题3.17 改为迭代器访问:

将下列代码

	for (vector<int>::size_type ix = 0;ix < vI.size()-1;ix += 2)
	{		
		
		cout<<vI[ix]+vI[ix+1]<<" ";
	}
改为:

	for (vector<int>::iterator iter1=vI.begin();iter1 < vI.end()-1; iter1+=2)
	{
		cout<<*iter1+*(iter1+1)<<" ";
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值