#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. window.onload和jquery等待加载的区别

    1.区别 window.onload是等待页面所有文档,图片等元素都加载完成再进行操作,是javascript原生语法. jquery是等待页面文档加载完成时,就进行操作. $(function(){ ...

  2. [LeetCode] 62. Unique Paths_ Medium tag: Dynamic Programming

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  3. 2018-2019-1 20189203《Linux内核原理与分析》第三周作业

    一.课程学习 计算机的三个法宝:存储程序计算机.函数调用堆栈.中断. 堆栈相关的寄存器:ESP(堆栈指针).EBP(基址指针). 堆栈操作:push:栈顶地址减少4个字节,并将操作数放入栈顶存储单元. ...

  4. (已解决)jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe

    jdk安装好之后,也配置好了环境变量,打开cmd输入javac可以跳出相关信息,可是输入java却一直提示:系统找不到文件C:\ProgramData\Oracle\Java\javapath\jav ...

  5. ACFS-9459: ADVM/ACFS is not supported on this OS version

    环境:RHEL 7.3 + Oracle 12.2.0.1 RAC 现象:acfs资源状态不正常,asmca图形也没有acfs相关内容,无法使用acfs. 1.具体现象 2.定位bug 3.解决问题 ...

  6. flex检查对象是否存在某个方法(函数)、属性的最简方法

    //if("方法/属性名" in object){存在do...}else{不存在do...}if("data" in event.tagert)//只要使用这 ...

  7. linux下git服务器安装

    git服务器配置http://www.cnblogs.com/dee0912/p/5815267.html git教程https://www.liaoxuefeng.com/wiki/00137395 ...

  8. C++重载操作符自增自减

    #include <iostream> using namespace std; class Test { friend ostream& operator<<(ost ...

  9. 使用shiro框架,注销问题的解决

    在使用shiro框架的时候,有时候会因为登录问题找不到注销的controller.所以会报404的错误,下面是解决办法: 1.首先写一个类SystemLogoutFilter继承LogoutFilte ...

  10. 如何将数据库中的数据导入到Solr中

    要使用solr实现网站中商品搜索,需要将mysql数据库中数据在solr中创建索引. 1.需要在solr的schema.xml文件定义要存储的商品Field. 商品表中的字段为: 配置内容是: < ...