每日打卡c++中vector容器使用
首先头文件#include<vector>
for_each一种算法需要头文件#include<algorithm>标准算法头文件
vector<int>::iterator迭代器,可以当指针用。
基本格式vector<数据类型>名称;数据类型可以是类。
例子
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class person
{
public:
person(string name, int age)
{
this->name=name;
this->age=age;
}
string name;
int age;
};
int main()
{
vector<person>v;
person p1("zhao", 1);
person p2("fu", 2);
person p3("qi", 3);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
第一种遍历方法
//for (vector<person>::iterator it = v.begin(); it != v.end(); it++)
//{
cout << (*it).name << " " << it->age << endl;//两种形式调用都可
//}
第二种遍历方法
vector<person>::iterator itBegin = v.begin();
vector<person>::iterator itEnd = v.end();
while (itBegin != itEnd)
{
cout << (* itBegin).name<<itBegin->age<<endl;
itBegin++;
}
第三种遍历方法用for_each(v.begin(),v.end(),函数名)//v代表数组名
void myprint( person a)
{
cout << a.name<<" " << a.age << endl;
}//需要写main外写一个打印函数
for_each(v.begin(), v.end(), myprint);
return 0;
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class person
{
public:
person(string name, int age)
{
this->name=name;
this->age=age;
}
string name;
int age;
};
int main()
{
vector<person*>v;
person p1("zhao", 1);
person p2("fu", 2);
person p3("qi", 3);
v.push_back(&p1);
v.push_back(&p2);
v.push_back(&p3);
for (vector<person*>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it)->name << " " << (*it)->age << endl;
}
return 0;
}
vector构造的几种方式:
1: vector<T>v 模板实现类实现,默认构造函数 格式vector<类型>v;
2:vector(v.begin(),v.end()) 将v[begin(),end()]区间中元素拷贝 格式vector<类型>v2(v1.begin(),v1.end());
3:vector(n,elem) 构造函数将n个elem拷贝 格式vector<类型>v(10,100);10个100
4:vector(const vector&c) 拷贝构造函数 格式vector<类型>v2(v1);
vector赋值操作:assign
1:v2.assign(v1.begin(),v1.end()) 前闭后开,不会取end的值;
2:v2.assign(n,elem) 添加n个elem;
也可用operator= ;
vector的容量和大小:
1:empty() 判断容器是否为空,若空返回true,不空返回false;
2: capacity() 容器容量大小
3:size()返回容器实际元素个数
4:resize(int num) 重新指定容器长度为num,若容器变长,填充默认值,若变短,则删除超出部分元素
5:resiae(int num,elem) 重新指定容器长度为num,若容器变长,填充指定默认值,若变短,则删除超出部分元素
vector的插入和删除:
1: push_back(elem) 在最后插入元素elem
2: pop_back() 删除最后一个元素
3:insert(const _iterator pos,elem) 迭代器指定位置pos插入元素elem 如:v.insert(v.begin(),100);
4:insert(const _iterator pos,int count,elem) 迭代器指定位置pos插入元素count个elem 如:v.insert(v.begin(),2,100);
5:vector<类型>::iterator iter = v.begin() + 数字; v.insert(iter, m); 在1+数字位置插入元素
6:v.insert(v.end(), { p1, p2 }); 指定位置插入两个元素
7:erase(const _iterator pos,elem) 删除迭代器指向元素
8:erase(const _iterator start,const _iterator end) 删除迭代器从start到end元素 如:v.erase(v.begin(),v.end());
9: clear() 删除所有元素 如:v.clear()
vector数据存取
1: at(int idex) 返回索引idex所指数据 如:v.at(i)
2: operator[] 返回索引idex所指数据
3: front() 返回第一个元素 v.front()
4: back() 返回最后一个元素
for (int i = 0; i < size(); i++)
{
cout << v[i] << endl;
}//可以这样输出
vector互换容器:可以用来缩小内存
1:swap(vec) 将vec与本身元素互换 如:v1.swap(v2)
收缩内存格式:vector<类型>(v).swap(v)
vector预留空间
1:reserve(int len) 容器预留len个元素长度,预留元素不会初始化,不可访问 如:v.reserve(10000);
本文来自博客园,作者:赵千万,转载请注明原文链接:https://www.cnblogs.com/zhaoqianwan/p/17386373.html
千万千万赵千万