学习了一个vector的基本使用,弄明白了之前一直不理解的预分配和resize
以下是对f_zyj大佬模板中提供的vector函数的测试和注解
f_zyj大佬的博客:
http://blog.youkuaiyun.com/f_zyj/article/details/51594851
地址为pdf中第12页
#define pause system("pause");
#define fence puts("-------------");
#define endline puts("")
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//定义
vector<int>s;
vector<int>ss(10);
//基本操作
fence;
//ss已经初始化了空间,所以可以直接下标访问.
ss[0] = 1;
ss[8] = 8;
ss[9] = 9;
cout << ss.front() << " " << ss.back() << '\n';
//删除表尾元素
ss.pop_back();
for (auto i : ss)cout << i << " ";
endline;
fence;
//在表尾插入元素
s.push_back(1);
//删除迭代器位置元素
s.erase(s.begin());
fence;
//首元素的迭代器和尾元素的下一位的迭代器
auto bg = ss.begin(), ed = ss.end();
//定义一个对象sss并从迭代器所指区间复制初值
vector<int>sss(bg, ed);
//删除迭代器指定序列
ss.erase(bg, ed);
//判断是否为空
cout << ss.empty() << '\n';
fence;
//输出序列长度
cout << sss.size() << '\n';
//改变序列长度,可以扩大数组缓冲区
sss.resize(11111);
cout << sss.size() << '\n';
//容量
cout << sss.capacity() << '\n';
fence;
//预分配缓冲空间,使之可以容纳n个元素,不影响size
sss.reserve(111111);
cout << sss.size() << '\n';
cout << sss.capacity() << '\n';
fence;
//清空
sss.clear();
sss.resize(10);
for (auto &i : sss)i = 1;
//交换元素
sss.swap(s);
for (const auto i : s)cout << i << " ";
endline;
fence;
//在迭代器前插入元素
s.insert(s.begin(),0);
for (const auto i : s)cout << i << " ";
endline;
//插入2个
s.insert(s.begin(), 2, 0);
for (const auto i : s)cout << i << " ";
endline;
//插入一段
s.insert(s.begin(), s.begin(), s.end());
for (const auto i : s)cout << i << " ";
endline;
fence;
pause
}
/*
运行结果:
-------------
1 9
1 0 0 0 0 0 0 0 8
-------------
-------------
1
-------------
9
11111
11111
-------------
11111
111111
-------------
1 1 1 1 1 1 1 1 1 1
-------------
0 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1
-------------
请按任意键继续. . .
*/