STL 小白学习(3) vector
#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的更多相关文章
- STL初步学习(vector)
前文 初三下学期进入新的学习,对于前两年的学习内容因为各种原因 上课打游戏,睡觉,看视频 已经遗忘,忘记如何使用,算是重新学习一次信息学,希望能尽快将以前的内容弥补上来,争取能在CSP-2020取得一 ...
- STL 小白学习(1) 初步认识
#include <iostream> using namespace std; #include <vector> //动态数组 #include <algorithm ...
- STL 小白学习(10) map
map的构造函数 map<int, string> mapS; 数据的插入:用insert函数插入pair数据,下面举例说明 mapStudent.insert(pair<, &qu ...
- STL 小白学习(9) 对组
void test01() { //构造方法 pair<, ); cout << p1.first << p1.second << endl; pair< ...
- STL 小白学习(8) set 二叉树
#include <iostream> using namespace std; #include <set> void printSet(set<int> s) ...
- STL 小白学习(7) list
#include <iostream> using namespace std; #include <list> void printList(list<int>& ...
- STL 小白学习(5) stack栈
#include <iostream> #include <stack> //stack 不遍历 不支持随机访问 必须pop出去 才能进行访问 using namespace ...
- STL 小白学习(6) queue
//queue 一端插入 另一端删除 //不能遍历(不提供迭代器) 不支持随机访问 #include <queue> #include <iostream> using nam ...
- STL 小白学习(4) deque
#include <iostream> #include <deque> //deque容器 双口 using namespace std; void printDeque(d ...
随机推荐
- python之wtforms组件
作用 生成 HTML 表单. form 表单验证. 基本使用 安装 pip3 install wtforms 示例 登录 from flask import Flask, render_templat ...
- form提交循环
使用ajax提交数据时,如果数据非常多,提交会比较麻烦,这时可以给form表一个id=“form”,用serializeArray()方法进行提交. erializeArray()方法通过序列化表单值 ...
- 附8 zipkin
一.zipkin作用 全链路追踪工具(查看依赖关系) 查看每个接口.每个service的执行速度(定位问题发生点或者寻找性能瓶颈) 二.zipkin工作原理 创造一些追踪标识符(tracingId,s ...
- rpm 包的安装、卸载、升级、查询、验证
关键字: rpm 强制卸载jdk rpm -e j2sdk1.4.2_04 强制覆盖安装jdk rpm -Uvh j2sdk-1_4_1_02-fcs-linux-i586.rpm --force - ...
- The All-purpose Zero (最长公共子序列)
题意:求最长公共子序列,但是有个辅助条件,那就是如果那个值为0,那么他可以更换为任意值. 思路:假设现在只剩下没有0的序列是不是就很好求了?那么我们的想法就是看有没有办法将0往最左端或者最有端移动,显 ...
- qemu-kvm内存虚拟化2
2017-04-20 上篇文章对qemu部分的内存虚拟化做了介绍,上篇文章对于要添加的FR,调用了 MEMORY_LISTENER_UPDATE_REGION(frnew, as, Forward, ...
- <转>jmeter(二十三)分布式测试
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- 03:open-falcon报警定制
1.1 配置报警 11111111111111111111
- [c/c++] programming之路(17)、高级指针
一.二级指针 二级指针的作用:1.函数改变外部变量指针2.外挂改变一个指针的值 #include<stdio.h> #include<stdlib.h> void main() ...
- react-router 4.0(二)传参
import React from 'react'; import ReactDOM from 'react-dom' import {Link,Route,HashRouter} from 'rea ...