#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. mysql 字段唯一性问题

    ALTER TABLE tb ADD unique (name);

  2. Oracle数据库分组排序

    select row_number() over(partition by oea03 order by oea02 desc) num,oea01,oea02,oea03 from oea_file ...

  3. RedHat7.之.图形化切换

    RedHat7.之.图形化切换 从黑窗口(纯指令输入界面)切换到图形化界面,使用root用户执行指令:startx 指令:startx 如有问题,欢迎纠正!!! 如有转载,请标明源处:https:// ...

  4. 游戏客户端Session的统一管理

    看本系统文章需要些C语言.数据结构和网络基础知识! 说明:由于游戏服务器端会有成千上万的客户端进行连接请求,所以要求我们需要做一些简单的会话管理!如下图 1.简单说明 进行统一的分配和管理,就需要我们 ...

  5. LeetCode #002# Add Two Numbers(js描述)

    索引 思路1:基本加法规则 思路2:移花接木法... 问题描述:https://leetcode.com/problems/add-two-numbers/ 思路1:基本加法规则 根据小学学的基本加法 ...

  6. mysql获取随机字符串和随机数的方法

    在我们开发的过程中,我们可能会需要在表中随机生成一些数据以供我们进行相应的测试. 就像我之前发的“mysql创建存储过程向数据表中加入规定条数的数据” 那么我们应该怎样生成随机的字符串和随机数字呢? ...

  7. c#查找窗口的两种办法

    原文最早发表于百度空间2009-06-17 1.process.MainWindowTitle(这个只能获取一部分窗口)2.EnumWindows(用windows API)

  8. docker原理与上帝进程

    做个笔记, 先水一会. 虚拟机指的是: 在软件的层面上通过模拟硬件进行的输入输出. docker原理:docker就是一个linux系统的进程, 它通过 Linux 的 namespaces 对不同的 ...

  9. Linux统计系统文件类型出现的次数

    awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab /^UUID/ 匹配确定行范围

  10. eclipse软件仿真操作

    1.编写程序代码(以SDRAM为例) 1.1 编写head.s汇编文件 .equ SDRAM_BASE, 0x30000000 .equ MEM_CTL_BASE, 0x48000000 .text ...