vector基本知识

一,向量

vector:向量(动态数组)内存分配是连续的空间,空间不够用会申请一个更大的连续的空间,同时迭代器失效

二,头文件
#include <vector>    //头文件
#include <iostream>
using namespace std;
三,定义向量的对象

以int类型为例

void STLDefine()
{
	vector<int> vec;   //定义向量的对象
}

定义的对象还可以是结构体

void STLDefine()
{
	struct stu
	{
		int age;
	};
	vector<stu> vec;   //定义向量的对象
}

定义的对象还可以是double型指针

vector< char > vec;相当于string

四,构造函数
void STLConstructor()   //构造函数 
{
	vector<int> vec;           //无参数的构造 	
	vector<int> vec1(5);       //五位有效元素,初始值为0 
	vector<int> vec2(5,12);    //将5个数赋值为12 
	vector<int> vec3(vec2);  
	vector<int>::iterator ite = vec2.begin();
	vector<int>::iterator ite1 = vec2.end();
	vector<int> vec4(ite,ite1);
	/*测试 
    cout << vec[0];   由于没有元素,测试会崩溃
	for(int i = 0; i < 5; i++)
		cout << vec1[i] << endl;  
	for(int i = 0; i < 5; i++)
		cout << vec2[i] << endl;  
	for(int i = 0; i < 5; i++)
		cout << vec3[i] << endl;   
	for(int i = 0; i < 5; i++)
		cout << vec4[i] << endl; */ 		
}
五,容量

(1)capacity()

  • 初始容量:定义对象的时候初始化几个,容量就是几。无参数就是0。
  • 空间不够用,新的空间容量:增加现有容量的一半,如果现有容量为10,新的容量就是15,如果现有容量是13,新的容量就是19。
  • 注意:在vc6.0编译器中,容量不够时,增加为现有容量的二倍。如果现有容量为10,新的容量就是20,如果现有容量是20,新的容量就是40。

(2)reserve();

  • 修改容量:只能变大,不能变小
vector<int> vec;
vec.reserve(10);   //容量由0变为10
  • 设置多大就是多大

(3)重新分配容量后,迭代器失效

六,大小

(1)size(): 有效元素的个数

vector<int> vec(4);
cout << vec.size() << endl; //输出为4

(2)resize() : 重新设置元素个数,容量不变

vector<int> vec(4);
vec.resize(3);
cout << vec.size() << endl; 
cout << vec.capacity() << endl;//输出3  \n  4

(3)empty(): 判断对象是否有元素
如果是空返回 1,如果有元素返回 0 。

vector<int> vec;	
cout << vec.empty(); //输出 1 
vector<int> vec(4);
cout << vec.empty(); //输出 0
七,操作

(1)查

  • 利用for循环以及下标运算输出
void STLDO()
{
	vector<int> vec;
	for(int i = 0; i < 10; i++)
	{
		vec.push_back(i);
	}
	for(int i = 0; i < 10; i++)
	{
		cout << vec[i] << endl;//还可以写成cout << vec.at(i) << endl;(这种更安全)
	}
}
  • 利用for循环以及迭代器输出
vector<int>::iterator ite = vec.begin();
for(ite; ite != vec.end(); ite ++)
{
	cout << *ite << endl;
}
  • 输出单个元素
    at() :返回单个元素
    back() : 返回尾巴元素
    begin() : 返回元素
cout << vec.at();
cout << vec.back();
cout << vec.begin();
  • for_each输出
#include <algorithm>//需要加这个头文件
void fun(int i)
{
	cout << i <<endl;
}
for_each(vec.begin,vec.end(),fun);

(2)增

  • 添加 : void push_back();
  • 中间添加 : insert
void fun(int i)
{
 	cout << i <<endl;
}
void STLADD()
{
	vector<int> vec;
	for(int i = 0; i < 10; i++)
	{
		vec.push_back(i);
	}
	vec.insert(vec.begin()+2,12);//在指定迭代器的位置加入一个数据
	vec.insert(vec.begin()+2,5,12);//在某个迭代器后加sum个值为value的元素
	vector<int> vec1(5,1);
	vec.insert(vec.begin()+3,vec1.begin(),vec1.begin()+3);//在某个迭代器后加入另一个向量的中间一段
	for_each(vec.begin,vec.end(),fun);
}

(3)删

  • 删除 :void pop_back();
  • 删除指定元素 : erase
vec.erase(vec.begin()+3);//删除一个
vec.erase(vec.begin()+3,vec.end());//删除一段

(4)改

  • 利用输出形式修改

(5)交换两个向量的内容

  • 用swap函数进行交换
  vec.swap(vec1);
八,两个算法

(1)遍历:for_each
(2)排序 :sort

  • 从小到大
vector<int> vec;
	vec.push_back(2);
	vec.push_back(1);
	vec.push_back(4);
	vec.push_back(5);
	vec.push_back(3);
	sort(vec.begin()+2,vec.end());//可以不从头到尾排
	for_each(vec.begin(),vec.end(),fun);
  • 从大到小
sort(vec.begin(),vec.end(),greater<int>());

注意:在使用greater函数时需要加头文件

#include < functional >

只有多多应用才能熟练掌握,加油

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值