STL学习(二)vector

10 篇文章 0 订阅

一.介绍

是动态数组,是连续的空间,如果空间不够用,会申请一个更大的连续的空间,同时迭代器失效

头文件为#include< vector >;

二.构造函数

(为了方便省略< T >)

  • vector();
    无参数的构造

  • vector(count);
    n个元素,和数组类似

  • vector( n,elem );
    用num个val来初始化容器
    5个1
    6个‘a’

  • vector( const vector &from );
    拷贝构造
    一定是同种类型元素的vector
    用另一个vector对象初始化当前的vector对象

  • vector( begin,end );
    构造函数将[a,b)区间元素拷贝给本身,注意该区间左开右闭

三.属性

(一)容量

Visual Studio定义对象的时候初始化几个,无参数就是零
容量不够时增加现有容量的一半。比如现有10个,新的就是15个,现有13个;增加13/2==6个,就是19个

VC++6.0
无参数就是0
容量不够时增加现有容量的一倍。比如现有10个,新的就是20个;现有20个,新的就是40个

reserve(); //可以提前预留空间以提高效率,

vector<int> v(10);   //capacity为10,size也为10,里面放有元素,加数据要重新申请内存
vector<int>v;
v.reserve(10);     //capacity为10但size为0,里面可以加数据   

修改容量
不能变小,只能变大
设置多大就是多大
string 是有区间的 15-31-47-63…

(二)大小
size()
	元素个数
resize()
	重新设置元素个数
	缩小时容量不变
	放大时容量改变
empty()
	对象是否有元素
	vector<int>vec(6);
	cout << vec.capacity() << endl;   //6
	cout << vec.size() << endl;   //6
	vec.reserve(11);
	cout << vec.capacity() << endl;  //11

用resize()改变超过capacity时capacity增加(capacity>=size)

	vector<int>vec(6);
	cout << vec.capacity() << endl;
	cout << vec.size() << endl;
	vec.reserve(11);
	vec.resize(12);
	cout << vec.capacity() << endl;
	cout << vec.size() << endl;

四.操作

(一)查
	for_each()
		输出全部
		循环
		迭代器
		
	at()
	[ ]
		下标运算
		
	back()
		返回尾巴的元素
		
	front()
		返回首元素
(二)增
  • 尾增加
    push_back()
  • 中间添加
    insert( pos ,elem);
    在pos位置插入elem元素
    insert( ipos,n,elem);
    在pos位置插入n个elem元素
    insert( pos, beg,end );
    在某个迭代器后加入另一个向量的中间一段
(三)删
  • 尾删除
    pop_back();

  • 删除指定元素
    erase( iterator loc );

    erase( iterator start, iterator end );

  • 删除所有
    clear();

(四)改

利用输出的形式可以修改

赋值函数(重新赋值,清除以前的)

assign(beg,end)
//将左开右闭区赋值给本身
assign(n,elem)
//将n个elem拷贝赋值

交换两个向量的内容
void swap( vector &from );

五.算法

(一)遍历

for_each(First, Last,fun );
参数三
有无返回值都行
参数是该容器的元素的类型

排序

void sort(First, Last );
从小到大

void sort( First, Last, greater< T >());
参数三 greater<>() 可以指定从大到小

乱序

函数random_shuffle()用来对一个元素序列进行重新排序(随机的)

#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
#include<functional>

using namespace std;

void fun(int k)
{
	cout << k << " ";
}
int main()
{
	
	vector<int> vec;
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);
	vec.push_back(4);
	vec.push_back(5);
	
	

	for (int i = 0; i < 10; i++)
	{
		
		srand((unsigned int)time(nullptr));  //产生种子,获取系统时间
		random_shuffle(vec.begin(), vec.end());
		for_each(vec.begin(), vec.end(), fun);
		cout << endl;
	}

	system("pause");
	return 0;
}

结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值