每日打卡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);

posted @ 2023-05-09 23:38  赵千万  阅读(5)  评论(0编辑  收藏  举报