#include <iostream>
using namespace std;
#include <vector> void printVector(vector<int>& v) {
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << (*it) << " ";
}
cout << endl;
}
//初始化
void test01() { vector<int> v1;//默认构造 初始化
//用数组进行初始化
int arr[] = { ,,, };
vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));
//用迭代器进行初始化
vector<int>v3(v2.begin(), v2.end());
//,,,
vector<int>v4(v3); //遍历
printVector(v2);
printVector(v3);
printVector(v4); } //常用赋值操作
void test02() {
vector<int> v = { ,,,, };
printVector(v);
vector<int> v2;
v2.assign(v.begin(), v.end()); //.assign()成员函数赋值
printVector(v2);
vector<int> v3;
v3 = v2;//等号重载 赋值
printVector(v3);
vector<int> _v = { ,,,, };
_v.swap(v);//将_v与v数据交换
printVector(_v);
printVector(v);
} //大小操作
//.size() .resize() .capacity()
void test03() {
vector<int> v1 = { ,,,, }; cout << "size :" << v1.size() << endl;//.size()访问元素个数 if (v1.empty()) {//.empty()判断对象是否为空 空返回真
cout << "v1为空" << endl;
}
else {
cout << "v1不为空" << endl;
}
//修改容器大小.resize()
printVector(v1);
v1.resize();//修改容器大小为2
printVector(v1);//超出范围的元素被删除
v1.resize();//修改容器大小为6 原有元素个数<修改后的个数 默认添加0
printVector(v1);
v1.resize(,);//修改容器大小为9 原有元素个数<修改后的个数 将默认添加0改为1
printVector(v1); cout <<"容量 : " <<v1.capacity() << endl;//.capacity()显示容量 //size可以不等于capacity
for (int i = ; i < ; i++) {
v1.push_back();
}
cout << "size : " << v1.size() << endl;//显示容器大小
cout << "容量 : " << v1.capacity() << endl;//显示容量
//size不等于capacity } //vector 存取数据 .at()
void test04() {
vector<int> v1 = { ,,,,, }; //[]重载 存取数据
for (int i = ; i < v1.size(); i++) {
cout << v1[i] << " ";
}
cout << endl; //成员函数.at() 存取数据
for (int i = ; i < v1.size(); i++) {
cout << v1.at(i) << " ";
}
cout << endl; //区别 at()会抛出异常
try {
cout << v1.at();
}
catch (...) {
cout << "接到异常!" << endl;
} }
//数据存储操作 .front() .back()
void test05() {
vector<int> v1 = { ,,,,, };
cout << "v1的第一个元素为:" << v1.front() << endl; //返回第一个元素值
cout << "v1的最后一个元素为:" << v1.back() << endl;//返回最后一个元素值
} //插入删除 .insert() .push_back() .pop_back() .clear()
void test06(){
vector<int> v1 = { ,,,,, };
//尾部添加 545
v1.push_back();
v1.push_back();//尾部添加 1
//尾部删除
v1.pop_back();
//在头部插入30
v1.insert(v1.begin(), );
//在尾部部插入30
v1.insert(v1.end(), );
//将30插入到v1[5]的位置
v1.insert(v1.begin() + , );
printVector(v1);
//vector 随即访问
//支持数组下标,一般支持随机访问
//迭代器可以直接进行 +1,+2,+3的操作 v1 = { ,,,,,,,,, };
printVector(v1);
//删除第一个元素
v1.erase(v1.begin());
printVector(v1);
//删除v1[5]元素
v1.erase(v1.begin()+);
printVector(v1);
//删除最后一个元素
v1.erase(v1.end() -);
printVector(v1);
//删除v1[2]到v1[3]的元素
v1.erase(v1.begin()+, v1.begin() + );
printVector(v1);
//清除所有元素
v1.clear();
printVector(v1);
}
//用swap收缩空间
void test07() {
vector<int> v;
for (int i = ; i < ; i++) {
v.push_back();
}
cout << "size: " << v.size() << endl;
cout << "capacity: " << v.capacity() << endl; v.resize();
cout << "size: " << v.size() << endl;
cout << "capacity: " << v.capacity() << endl; //收缩capacity
//vector<int>(v) 用v初始化匿名对象*
//swap 交换指针指向 将v空间指向匿名对象的空间
//匿名对象析构 结束
vector<int>(v).swap(v);
cout << "size: " << v.size() << endl;
cout << "capacity: " << v.capacity() << endl;
} //reserve 和 resize函数的区别
//reserve 预留空间
//resize 修改大小
void test08() {
int num = ;
int* addr = NULL; vector<int> v;
v.reserve();//预留空间 减少拷贝次数
for (int i = ; i < ; i++) {
v.push_back(i);
if (addr != &(v[])) { //计算有多少次空间的申请与释放
addr = &(v[]);
num++;
}
}
cout << "num:" << num<<endl;
} int main() {
test08();
}

STL 小白学习(3) vector的更多相关文章

  1. STL初步学习(vector)

    前文 初三下学期进入新的学习,对于前两年的学习内容因为各种原因 上课打游戏,睡觉,看视频 已经遗忘,忘记如何使用,算是重新学习一次信息学,希望能尽快将以前的内容弥补上来,争取能在CSP-2020取得一 ...

  2. STL 小白学习(1) 初步认识

    #include <iostream> using namespace std; #include <vector> //动态数组 #include <algorithm ...

  3. STL 小白学习(10) map

    map的构造函数 map<int, string> mapS; 数据的插入:用insert函数插入pair数据,下面举例说明 mapStudent.insert(pair<, &qu ...

  4. STL 小白学习(9) 对组

    void test01() { //构造方法 pair<, ); cout << p1.first << p1.second << endl; pair< ...

  5. STL 小白学习(8) set 二叉树

    #include <iostream> using namespace std; #include <set> void printSet(set<int> s) ...

  6. STL 小白学习(7) list

    #include <iostream> using namespace std; #include <list> void printList(list<int>& ...

  7. STL 小白学习(5) stack栈

    #include <iostream> #include <stack> //stack 不遍历 不支持随机访问 必须pop出去 才能进行访问 using namespace ...

  8. STL 小白学习(6) queue

    //queue 一端插入 另一端删除 //不能遍历(不提供迭代器) 不支持随机访问 #include <queue> #include <iostream> using nam ...

  9. STL 小白学习(4) deque

    #include <iostream> #include <deque> //deque容器 双口 using namespace std; void printDeque(d ...

随机推荐

  1. 归并排序(Python实现)

    目录 1. 归并排序--while版本 2. 测试用例 3. 算法时间复杂度分析 1. 归并排序--while版本 def merge_sort_while(b_list): '''归并排序--whi ...

  2. Oracle 24角色管理

    了解什么是角色 Oracle角色(role)就是一组权限(或者说是权限的集合). 用户可以给角色赋予指定的权限,然后将角色赋给相应的用户. 三种标准的角色 connect(连接角色) 拥有connec ...

  3. Bukkit之yaml动态读取

    在使用bukkit框架写插件的时候会经常使用到yml格式的文件来存储配置或者玩家数据,这里来说一下实现yml中数据的动态读写: 先来看一下yml文件中的内容结构 public boolean addB ...

  4. axios的基本概念及安装配置方法

    ajax:异步请求,是一种无需再重新加载整个网页的情况下,能够更新部分网页的技术 axios:用于浏览器和node.js的基于promise的HTTP客户端 1.从浏览器制作XMLHttpReques ...

  5. react和vue,angular的比较

    就这几天我所了解到react情况和大家探讨一下子react的知识: react由facebook团队维护的一套框架,已经应用在instagram网站上了,react以其独特的性能优化方案,正在被越来越 ...

  6. 一个关于cookie的坑

    #问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有 ...

  7. linux命令之pssh命令

    查看一下pssh命令的帮助文档: [root@test2 ~]# pssh --version [root@test2 ~]# pssh --help Usage: pssh [OPTIONS] co ...

  8. opencv学习之路(28)、轮廓查找与绘制(七)——位置关系及轮廓匹配

    一.点与轮廓的距离及位置关系 #include "opencv2/opencv.hpp" #include <iostream> using namespace std ...

  9. Linux统计文件中单词出现的次数

    grep -E "\b[[:alpha:]]+\b"  /etc/fstab  -o | sort | uniq -c 或 awk '{for(i=1;i<NF;i++){c ...

  10. python之路——模块和包

    阅读目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 二 包 2.2 import 2 ...