vector中存放内置数据类型
#include<vector>
#include<algorithm>
class Person
{
public:
int m_age;
string m_name;
Person(int age, string name)
{
m_age = age;
m_name = name;
}
};
void test01()
{
Person p1(12, "a");
Person p2(10, "t");
Person p3(13, "b");
Person p4(14, "c");
Person p5(15, "v");
Person p6(16, "f");
Person p7(17, "h");
vector<Person> v;
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
v.push_back(p6);
v.push_back(p7);
for (vector<Person> ::iterator it = v.begin(); it != v.end(); it++)
{
cout << "名字" << it->m_name << " 年龄" << it->m_age << " ";
}
cout << endl;
}
// vector 存放的是自定义类型的指针
void test02()
{
Person p1(12, "a");
Person p2(10, "t");
Person p3(13, "b");
Person p4(14, "c");
Person p5(15, "v");
Person p6(16, "f");
Person p7(17, "h");
vector<Person*> v;
v.push_back(&p1);
v.push_back(&p2);
v.push_back(&p3);
v.push_back(&p4);
v.push_back(&p5);
v.push_back(&p6);
v.push_back(&p7);
for (vector<Person*> ::iterator it = v.begin(); it != v.end(); it++)
{
cout << "名字" << (*it)->m_name<< " 年龄" << (*it)->m_age << " ";
}
cout << endl;
}
int main()
{
test01();
test02();
return 0;
}
vector容器中再嵌套容器
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
void test01()
{
vector<vector<int>>v;
vector<int> v1;
vector<int> v2;
vector<int> v3;
vector<int> v4;
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1);
v2.push_back(i + 2);
v3.push_back(i + 3);
v4.push_back(i + 4);
}
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
v.push_back(v4);
for (vector<vector<int>> ::iterator it = v.begin(); it != v.end(); it++)
{
// (*it) 就是一个容器 vector<int>
for (vector<int> ::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
{
cout << *vit << " ";
}
cout << endl;
}
}
int main()
{
test01();
return 0;
}
vector构造函数


#include<vector>
#include<algorithm>
void prinftVector(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
vector<int> v1; // 默认构造 无参构造
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1);
}
prinftVector(v1);
// 通过区间的方式进行构造
vector<int> v2(v1.begin(), v1.end());
prinftVector(v2);
// n个elem方式进行构造
vector<int> v3(10, 100);
prinftVector(v3);
// 拷贝构造
vector<int> v4(v3);
prinftVector(v4);
}
int main()
{
test01();
return 0;
}
vector容器的赋值操作

#include<vector>
#include<algorithm>
void prinftVector(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
vector<int> v1; // 默认构造 无参构造
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1);
}
prinftVector(v1);
// 赋值 operator=
vector<int> v2;
v2 = v1;
prinftVector(v2);
// assign
vector<int> v3;
v3.assign(v1.begin(), v1.end());
prinftVector(v3);
// n个elem赋值
vector<int> v4;
v4.assign(10, 100);
prinftVector(v4);
}
vector容量和大小

void prinftVector(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
vector<int> v1; // 默认构造 无参构造
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1);
}
prinftVector(v1);
if (v1.empty()) // 为真 代表容器为空
{
cout << "v1为空" << endl;
}
else
{
cout << "v1不为空" << endl;
cout << "v1的容量为: " << v1.capacity() << endl;
cout << "v1的大小为:" << v1.size() << endl;
}
// resize 重新指定大小
v1.resize(13, 100); // 利用重载的版本 可以指定默认填充值
prinftVector(v1); // 如果重新指定的比原来长 默认用0填充新位置
v1.resize(3); // 如果指定的比原来短了 超出的部分会被直接删除
}
vector插入和删除

void prinftVector(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
vector<int> v1; // 默认构造 无参构造
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1); // 尾插
}
prinftVector(v1);
// 尾删
v1.pop_back();
prinftVector(v1);
// 插入
v1.insert(v1.begin(), 100);
prinftVector(v1);
v1.insert(v1.begin(), 3, 1000);
prinftVector(v1);
// 删除
v1.erase(v1.begin());
prinftVector(v1);
// 清空
v1.clear();
prinftVector(v1);
}
int main()
{
test01();
return 0;
}
vector数据的存取

void prinftVector(vector<int> &v)
{
for (int i = 0; i < v.size(); i++) // 利用中括号的方式来访问vector容器中的元素
{
cout << v[i] << " ";
}
cout << endl;
}
void test01()
{
vector<int> v1;
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1);
}
prinftVector(v1);
//利用at的方式来访问元素
for (int i = 0; i < v1.size(); i++)
{
cout << v1.at(i) << " ";
}
cout << endl;
cout << "获得第一个元素" << v1.front() << endl;
cout << "获得最后一个元素" << v1.back() << endl;
}
vector互换容器

void prinftVector(vector<int> &v)
{
for (int i = 0; i < v.size(); i++) // 利用中括号的方式来访问vector容器中的元素
{
cout << v[i] << " ";
}
cout << endl;
}
void test01()
{
vector<int> v1;
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 1);
}
prinftVector(v1);
vector<int> v2;
for (int i = 5; i > 0; i--)
{
v2.push_back(i);
}
prinftVector(v2);
// 交换容器
v1.swap(v2);
prinftVector(v1);
prinftVector(v2);
}
void test02()
{
// 实际用途 巧用swap可以收缩内存空间
vector<int> v3;
for (int i = 0; i < 1000000; i++)
{
v3.push_back(i + 1);
}
cout << "v3的容量为: " << v3.capacity() << endl;
cout << "v3的大小为:" << v3.size() << endl;
v3.resize(10); // 重新指定大小
cout << "v3的容量为: " << v3.capacity() << endl;
cout << "v3的大小为:" << v3.size() << endl;
// 巧用swap可以收缩内存空间
vector<int>(v3).swap(v3);
/* vector<int>(v3) 这里是一个匿名对象
它的大小和容量均为v3的大小 也就是10 10
然后通过swap进行交换后 v3的大小和容量变为了10 10
而匿名对象的大小和容量变为了 v3的大小和容量 也就是10 1049869
但是匿名对象的特点就是一旦执行完这行代码 当编译器识别到这是一个匿名对象后 就会释放匿名对象的内存
*/
cout << "v3的容量为: " << v3.capacity() << endl;
cout << "v3的大小为:" << v3.size() << endl;
}
vector预留空间

void test01()
{
vector<int> v1;
v1.reserve(1000);
int num = 0; // 统计开辟次数
int* p = NULL;
for (int i = 0; i < 100; i++)
{
v1.push_back(i + 1);
if (p != &v1[0])
{
p = &v1[0];
num++;
}
}
cout << num << endl;
// 如果数据量比较大 一开始可以利用reserve预留空间
}
本文详细探讨了C++ STL中vector容器的多种使用方式,包括存储内置数据类型和自定义类型、嵌套容器、构造函数、赋值操作、容量与大小管理、插入与删除、数据存取及容器互换等高级技巧,为读者提供了全面的vector容器使用指南。
3518

被折叠的 条评论
为什么被折叠?



