STL:vector容器常用操作
Posted studying~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL:vector容器常用操作相关的知识,希望对你有一定的参考价值。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
/* vector迭代器*/
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
//vector<int>::iterator it_start = v.begin();
//vector<int>::iterator it_end = v.end();
vector<int>::reverse_iterator it_start = v.rbegin();
vector<int>::reverse_iterator it_end = v.rend();
for (; it_start != it_end; it_start++)
{
cout << *it_start << " ";
}
cout << endl;
}
/*空间配置*/
void test02()
{
vector<int> v;
for (int i = 0; i < 100; i++)
{
v.push_back(i);
cout << v.capacity() << endl;
}
}
/* vector的构造函数
vector<T> v; //采用模板实现类实现,默认构造函数
vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。
vector(n, elem);//构造函数将n个elem拷贝给本身。
vector(const vector &vec);//拷贝构造函数。
*/
void print(int a)
{
cout << a << endl;
}
void test03()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
//vector<int> v2(v1);
//vector<int> v2(v1.begin(),v1.end());
vector<int> v2(v1.begin()+1, v1.end());
for_each(v2.begin(),v2.end(), print);
}
/*常用赋值操作
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
vector& operator=(const vector &vec);//重载等号操作符
swap(vec);// 将vec与本身的元素互换。
*/
void test04()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
vector<int> v2;
v2.push_back(5);
v2.push_back(6);
v2.push_back(7);
v2.push_back(8);
//v2.assign(v1.begin(),v1.end())
//v2.assign(10,5);
//v2 = v1;
v2.swap(v1);
for_each(v2.begin(), v2.end(), print);
}
/* vector大小操作
size();//返回容器中元素的个数
empty();//判断容器是否为空
resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长>度的元素被删除。
capacity();//容器的容量
reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。
*/
void test05()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
v1.resize(10,6);
if (!v1.empty())
{
cout << "不为空" << endl;
}
for_each(v1.begin(), v1.end(), print);
vector<int> v2;
v2.reserve(1000);//设置容量
cout << v2.size() << endl;
cout << v2.capacity() << endl;
}
/*
vector数据存取操作
at(int idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。
operator[];//返回索引idx所指的数据,越界时,运行直接报错
front();//返回容器中第一个数据元素
back();//返回容器中最后一个数据元素
*/
void test06()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
cout << v1.at(2) << endl;
cout << v1[2] << endl;
cout << v1.front() << endl;
cout << v1.back() << endl;
}
/*
vector插入和删除操作
insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele.
push_back(ele); //尾部插入元素ele
pop_back();//删除最后一个元素
erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素
erase(const_iterator pos);//删除迭代器指向的元素
clear();//删除容器中所有元素
*/
void test07()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
//v1.insert(v1.begin()+2,3,9);
//v1.pop_back();
//v1.erase(v1.begin()+3,v1.end());
//v1.erase(v1.begin() + 3);
v1.clear();
for_each(v1.begin(), v1.end(), print);
}
/*
swap收缩空间
*/
void test08()
{
vector<int> v1;
for (int i = 0; i < 10000; i++)
{
v1.push_back(i);
}
cout << v1.size() << " " << v1.capacity() << endl;
v1.resize(10);
cout << v1.size() << " " << v1.capacity() << endl;
vector<int>(v1).swap(v1);
cout << v1.size() << " " << v1.capacity() << endl;
}
/*计算重新开辟了多少次内存空间*/
void test09()
{
vector<int> v;
int *p = NULL;
int count = 0;
for (int i = 0; i < 10000; i++)
{
v.push_back(i);
if (p != &v[0])
{
count++;
p = &v[0];
}
}
}
/*vector容器排序*/
bool compare(int a, int b)
{
return a < b;
}
void test10()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(2);
v1.push_back(5);
v1.push_back(4);
//sort(v1.begin(),v1.end())//默认是从小到大
sort(v1.begin(),v1.end(), compare);//从大到小
for_each(v1.begin(), v1.end(), print);
}
class Person
{
public:
Person(int age,string s)
{
this->age = age;
this->name = s;
}
int age;
string name;
};
void print_person(Person &p)
{
cout << p.age << " " << p.name << endl;
}
bool compare_person(Person &p1, Person &p2)
{
return p1.age > p2.age;
}
void test11()
{
vector<Person> v;
Person p1(10,"安其拉");
Person p2(40, "德玛");
Person p3(50, "韩信");
Person p4(20, "猴子");
Person p5(30, "三眼怪");
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
for_each(v.begin(), v.end(), print_person);
sort(v.begin(),v.end(), compare_person);
for_each(v.begin(), v.end(), print_person);
}
int main()
{
test11();
return 0;
}
以上是关于STL:vector容器常用操作的主要内容,如果未能解决你的问题,请参考以下文章