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 ...
随机推荐
- Kafka— —副本(均衡负载)
创建一个副本数为3的topic Now create a new topic with a replication factor of three: > bin/kafka-topics.sh ...
- cherry-pick多个commitid时的顺序说明
有的时候,我们在一个分支上提交了几个commit,然后我们会需要提交到其他分支上,一般情况下,我们会采用的merge的方式来合并分支,另外一种方式是只需要其中几个提交时,我们会cherry-pick到 ...
- docker centos 老是退出
1. 使用docker 镜像可以加快拉去.操作系统的使用第二种格式. 您可以使用以下命令直接从该镜像加速地址进行拉取: $ docker pull registry.docker-cn.com/myn ...
- python set的函数
1. add() 为集合添加元素 2. clear() 移除集合中的所有元素 3. copy() 拷贝一个集合 4. difference() 返回多个集合的差集 5. difference_upda ...
- javaScript核心基础
JavaScript 是属于网络的脚本语言! JavaScript 作用:被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies(js也可创建cookie,在浏览器里面创建),以及更多 ...
- word之选中文本
在word和notepad中: 特别是在文件很大,如果用鼠标下滑的话,不知道会滑多久呢, 快捷键+鼠标点击截至处
- 用命令行打开sublime
在linux下装了linux后默认并不能通过运行命令的方式打开,这就让我们不能像vim一样可以通过 vim <fileName> 来打开文件. 不过我们可以通过把sublime的执行文件放 ...
- iterator与const_iterator
iterator与const_iterator 所有的标准库容器都定义了相应的迭代器类型.迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素. 1.iterato ...
- https://scrapingclub.com/exercise/detail_sign/
def parse(self, response): # pattern1 = re.compile('token=(.*?);') # token = pattern1.findall(respon ...
- c# 文件与流
1.创建和删除目录 在c#中涉及到输入.输出(i/o)相关操作的API都被放在System.IO命名空间下,或者子命令System.IO.IsolatedStoorage中.对目录进行操作可以使用Di ...