简介
在C++中,向量(vector)是标准模板库(STL)的一部分,它是一个封装了动态大小数组的顺序容器。它能够存放各种类型的对象。简单来说,vector就是一个能够存放任意类型的动态数组。
1 遍历
vector使用连续的存储空间来存储元素,这意味着可以使用常规指针,元素下标,以及迭代器来访问存储空间中的元素。
迭代器:
void PrintfVector(vector<int> v)
{
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
下标:
void PrintfVector(vector<int> v)
{
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
}
2 创建与初始化
vector容器的拷贝赋值,除了常规使用重载等号操作符,还可以使用内置的assign()函数。
2.1默认创建
vector<int> v1;
2.2拷贝创建
vector<int> v2(v1);
vector<int> v3;
v3=v1;
vector<int> v4; 使用assign()函数方法拷贝赋值
v4.assign(v1.begin(),v1.end());
2.3创建含有n个相同元素的vector
vector<int> v5(3,9); //创建含有 3个9 的vector容器
vector<int> v6; //使用assign()函数方法创建含有 6个9 的vector容器
v6.assign(6,9);
实例代码:
//02创建与初始化
void test02()
{
//1.默认创建
vector<int> v1;
for (int i = 0; i < 3; i++)
{
v1.push_back(20+i);
}
PrintfVector(v1);
//2.拷贝创建
vector<int> v2(v1);
PrintfVector(v2);
vector<int> v3;
v3=v1;
PrintfVector(v3);
vector<int> v4;
v4.assign(v1.begin(),v1.end()); //assign()函数方法
PrintfVector(v4);
//3.创建含有n个相同元素的vector
vector<int> v5(3,9);
PrintfVector(v5);
vector<int> v6; //assign()函数方法
v6.assign(6,9);
PrintfVector(v6);
}
运行结果图:
3 增加元素
3.1尾部插入元素
v1.push_back(elem);
3.2使用迭代器在任意位置插入元素
vector<int>::iterator it = v1.begin();
v1.insert(it, elem); //在迭代器it位置插入元素elem
v1.insert(it, n,elem); //在迭代器it位置插入n个元素elem
实例代码:
//03增加元素
void test03()
{
vector<int> v1;
for (int i = 0; i < 9; i++)
{
v1.push_back(30+i);
}
PrintfVector(v1);
vector<int>::iterator it = v1.begin();
v1.insert(it+5, 0);
v1.insert(it, 2,0);
PrintfVector(v1);
}
运行结果图:
4 删除元素
vector中使用erase()函数删除任意位置的元素。
vector<int>::iterator it= v0.begin();
v0.erase(it); //删除指定位置的元素
v0.erase(v0.begin()+1,v0.end()-2); //删除指定区间的元素
实例代码:
//04删除元素
void test04()
{
vector<int> v0;
for (int i = 0; i < 9; i++)
{
v0.push_back(40+i);
}
PrintfVector(v0);
vector<int>::iterator it= v0.begin();
v0.erase(it);
PrintfVector(v0);
v0.erase(v0.begin()+1,v0.end()-2);
PrintfVector(v0);
}
运行结果图:
5 返回容器容量,计算元素个数,判空,重定义容器大小
5.1 vector中使用v0.capacity()函数返回容器容量
v0.capacity()
5.2 vector中使用v0.size()erase()函数返回元素个数
v0.size()
5.3 vector中使用v0.empty()函数判断容器是否为空
v0.empty()
5.4 vector中使用v0.resize(n,elem)函数重定义容器长度为n,若长度变长,使用elem元素填充(elem默认值为0),若长度变短,则删除多余元素。
v0.resize(9, 1);
实例代码:
//05返回容器容量,计算元素个数,判空,重定义容器大小
void test05()
{
vector<int> v0(3,9);
//1返回容器容量
cout << "v1的容量为" << v0.capacity() << endl;
//2返回元素个数
cout << "容器中元素个数为:" << v0.size() << endl;
//3判断容器是否为空
cout << "判断容器是否为空:" << v0.empty() << endl;
//4重定义容器长度
v0.resize(9, 1);
cout << "重定义v0容器长度为9:";
PrintfVector(v0);
v0.resize(3);
cout << "重定义v0容器长度为3:";
PrintfVector(v0);
}
运行结果图:
6 访问和更改数据
list容器中访问和更改数据可以使用下标索引或则at()函数
v0.at("索引");
访问容器第一个元素
v0.front()
访问容器最后一个元素
v0.back()
实例代码:
//06访问和更改数据
void test06()
{
vector<int> v0;
for (int i = 0; i < 9; i++)
{
v0.push_back(60+i);
}
cout << "test06访问和更改前容器vector为:" ;
PrintfVector(v0);
v0[1] = 0;
cout << "v0[1]:" << v0[1] << endl;
v0.at(2) = 0;
cout << "v0.at(2):" << v0.at(2) << endl;
cout << "容器vector的第一个元素为: " << v0.front() << endl;
cout << "容器vector的最后一个元素为: " << v0.back() << endl;
}
运行结果图:
7 互换容器元素
list容器中使用swap()函数互换容器
v1.swap(v0);
实例代码:
//07互换容器元素
void test07()
{
vector<int> v0;
for (int i = 0; i < 9; i++)
{
v0.push_back(70+i);
}
vector<int> v1(3,1);
cout<<"互换前v0为:"<<endl;
PrintfVector(v0);
cout<<"互换前v1为:"<<endl;
PrintfVector(v0);
v1.swap(v0);
cout<<"互换之后v0为:"<<endl;
PrintfVector(v0);
cout<<"互换之后v1为:"<<endl;
PrintfVector(v1);
}
运行结果图:
8 查找元素与统计元素个数(非内置函数)
vector 容器中使用fing()函数查询是否含有某元素。(非内置函数)
int sum=count(v0.begin(),v0.end(),elem); //查询元素elem的数量
vector 容器中使用count()函数查询含有某元素的数量。(非内置函数)
vector<int>::iterator it1=find(v0.begin(),v0.end(),elem); //查询是否含有elem元素
实例代码:
//08查找元素与统计元素个数
void test08()
{
vector<int> v0;
for (int i = 0; i < 3; i++)
{
v0.push_back(80+i);
}
vector<int>::iterator it=v0.begin();
v0.insert(it, 2,81);
PrintfVector(v0);
int sum=count(v0.begin(),v0.end(),81);
cout<<""<<sum<<endl;
vector<int>::iterator it1=find(v0.begin(),v0.end(),81);
if(it1!=v0.end()) cout<<"找到元素81"<<endl;
}
运行结果图:
9 翻转容器与清空容器
vector 容器中使用reverse()函数查询是否含有某元素。(非内置函数)
reverse(v0.begin(),v0.end()); //翻转v0容器
vector 容器中使用v0.clear()函数查询是否含有某元素。
v0.clear();
实例代码:
//09翻转容器与清空容器
void test09()
{
vector<int> v0;
for (int i = 0; i < 3; i++)
{
v0.push_back(90+i);
}
cout<<"容器v0翻转前为:"<<endl;
PrintfVector(v0);
reverse(v0.begin(),v0.end());
cout<<"容器v0翻转之后为:"<<endl;
PrintfVector(v0);
v0.clear();
cout<<"容器v0清空后为:"<<endl;
PrintfVector(v0);
}
运行结果图:
10实例源码
#include<bits/stdc++.h>
using namespace std;
void PrintfVector(vector<int> v)
{
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
/*
void PrintfVector(vector<int> v)
{
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
}
*/
//02创建与初始化
void test02()
{
//1.默认创建
vector<int> v1;
for (int i = 0; i < 3; i++)
{
v1.push_back(20+i);
}
PrintfVector(v1);
//2.拷贝创建
vector<int> v2(v1);
PrintfVector(v2);
vector<int> v3;
v3=v1;
PrintfVector(v3);
vector<int> v4;
v4.assign(v1.begin(),v1.end()); //assign()函数方法
PrintfVector(v4);
//3.创建含有n个相同元素的vector
vector<int> v5(3,9);
PrintfVector(v5);
vector<int> v6; //assign()函数方法
v6.assign(6,9);
PrintfVector(v6);
}
//03增加元素
void test03()
{
vector<int> v1;
for (int i = 0; i < 9; i++)
{
v1.push_back(30+i);
}
PrintfVector(v1);
vector<int>::iterator it = v1.begin();
v1.insert(it+5, 0);
v1.insert(it, 2,0);
PrintfVector(v1);
}
//04删除元素
void test04()
{
vector<int> v0;
for (int i = 0; i < 9; i++)
{
v0.push_back(40+i);
}
PrintfVector(v0);
vector<int>::iterator it= v0.begin();
v0.erase(it);
PrintfVector(v0);
v0.erase(v0.begin()+1,v0.end()-2);
PrintfVector(v0);
}
//05返回容器容量,计算元素个数,判空,重定义容器大小
void test05()
{
vector<int> v0(3,9);
//1返回容器容量
cout << "v1的容量为" << v0.capacity() << endl;
//2返回元素个数
cout << "容器中元素个数为:" << v0.size() << endl;
//3判断容器是否为空
cout << "判断容器是否为空:" << v0.empty() << endl;
//4重定义容器长度
v0.resize(9, 1);
cout << "重定义v0容器长度为9:";
PrintfVector(v0);
v0.resize(3);
cout << "重定义v0容器长度为3:";
PrintfVector(v0);
}
//06访问和更改数据
void test06()
{
vector<int> v0;
for (int i = 0; i < 9; i++)
{
v0.push_back(60+i);
}
cout << "test06访问和更改前容器vector为:" ;
PrintfVector(v0);
v0[1] = 0;
cout << "v0[1]:" << v0[1] << endl;
v0.at(2) = 0;
cout << "v0.at(2):" << v0.at(2) << endl;
cout << "容器vector的第一个元素为: " << v0.front() << endl;
cout << "容器vector的最后一个元素为: " << v0.back() << endl;
}
//07互换容器元素
void test07()
{
vector<int> v0;
for (int i = 0; i < 9; i++)
{
v0.push_back(70+i);
}
vector<int> v1(3,1);
cout<<"互换前v0为:"<<endl;
PrintfVector(v0);
cout<<"互换前v1为:"<<endl;
PrintfVector(v0);
v1.swap(v0);
cout<<"互换之后v0为:"<<endl;
PrintfVector(v0);
cout<<"互换之后v1为:"<<endl;
PrintfVector(v1);
}
//08查找元素与统计元素个数
void test08()
{
vector<int> v0;
for (int i = 0; i < 3; i++)
{
v0.push_back(80+i);
}
vector<int>::iterator it=v0.begin();
v0.insert(it, 2,81);
PrintfVector(v0);
int sum=count(v0.begin(),v0.end(),81);
cout<<""<<sum<<endl;
vector<int>::iterator it1=find(v0.begin(),v0.end(),81);
if(it1!=v0.end()) cout<<"找到元素81"<<endl;
}
//09翻转容器与清空容器
void test09()
{
vector<int> v0;
for (int i = 0; i < 3; i++)
{
v0.push_back(90+i);
}
cout<<"容器v0翻转前为:"<<endl;
PrintfVector(v0);
reverse(v0.begin(),v0.end());
cout<<"容器v0翻转之后为:"<<endl;
PrintfVector(v0);
v0.clear();
cout<<"容器v0清空后为:"<<endl;
PrintfVector(v0);
}
int main()
{
//
//test02();
//
//test03();
//
//test04();
//
//test05();
//
//test06();
//
//test07();
//
//test08();
//
//test09();
}
本人技术很不成熟,如有不足, 欢迎指正!