输出:
#include <iostream>
#include <vector>
using namespace std;
void printVector (auto & v)
{
for (const int i : v)
cout << i << " ";
cout << endl;
}
// 构造
void test1 ()
{
// 默认构造, 无参数构造
vector <int> v1;
for (int i = 0; i < 5; i++)
v1.push_back (i);
printVector (v1);
// 区间构造
vector<int>v2(v1.begin (), v1.end ());
printVector (v2);
// n 个elem 方式
vector<int>v3 (10, 100); // 前面是个数,后面是数值
printVector (v3);
// 拷贝构造
vector <int>v4 (v3);
printVector (v4);
}
// 赋值
void test2 ()
{
vector <int> v1;
for (int i = 0; i < 5; i++)
v1.push_back (i);
vector<int> v2 = v1;
printVector (v2);
// assign
vector<int> v3;
v3.assign (v1.begin (), v1.end ());
printVector (v3);
// n个elem方式赋值
vector<int> v4;
v4.assign (10, 2);
printVector (v4);
}
// 容量
void test3 ()
{
vector <int> v1;
for (int i = 0; i < 5; i++)
v1.push_back (i);
// empty ()
if (v1.empty ())
cout << "empty" << endl;
else
cout << "no empty" << "容量:" << v1.capacity() << endl << "size :" << v1.size() << endl;
// 重新指点大小
v1.resize (15); // 默认用0填充
printVector (v1);
// 或者
v1.resize (19, 2); // 选择填充
printVector (v1);
// 重新定义范围比原来小
v1.resize (3);
printVector (v1);
}
// 插入、删除
void test4 ()
{
vector <int> v1;
for (int i = 0; i < 5; i++)
v1.push_back (i); // 尾插
// 尾删
v1.pop_back ();
printVector (v1);
// 头插 第一个参数是迭代器
// (迭代器, 个数, 插入数值)
v1.insert (v1.begin (), 2, 1000);
printVector (v1);
// 删除
v1.erase (v1.begin ()); // 不写明位置删除一个
printVector (v1);
v1.erase (v1.begin(), next (v1.begin (), 3)); // 也可以这么写
// v1.erase (v1.begin (), v1.end ()); // 全删
printVector (v1);
}
// 数据存取
void test5 ()
{
vector <int> v1;
for (int i = 0; i < 5; i++)
v1.push_back (i); // 尾插
// 输出其中任意元素
for (int i = 0; i < 5; i++)
{
cout << v1[i] << " ";
}
cout << endl;
for (int i = 0; i < 5; i++)
cout << v1.at(i) << " ";
cout << endl;
// 输出具体数值,使用的时候注意与begin和end分开
cout << "first: " << v1.front () << endl;
// 返回第一个元素
cout << "last: " << v1.back () << endl;
// 返回最后一个元素
}
// 互换容器
void test6 ()
{
vector <int> v1;
for (int i = 0; i < 5; i++)
v1.push_back (i); // 尾插
vector <int> v2;
for (int i = 9; i >= 0; i--)
v2.push_back (i);
// 交换
v1.swap (v2);
printVector (v1);
printVector (v2);
}
// 预留空间
void test7 ()
{
// 检测多少次开辟空间
vector <int> v1;
int num = 0;
int * p = NULL;
for (int i = 0; i < 100000; i++)
{
v1.push_back (i); // 尾插
if (p != &v1[0])
{
p = &v1[0];
num++;
}
}
cout << num << endl;
// reserve 预留空间
num = 0;
vector<int>v2;
v2.reserve (100000);
for (int i = 0; i < 100000; i++)
{
if (p != &v2[0])
{
p = &v2[0];
num++;
}
}
cout << num << endl;
}