vector 学习笔记

vector 使用练习:


/****************************************
* File Name: vector.cpp
* Author: sky0917
* Created Time: 2014年04月27日 11:07:33
****************************************/
#include <iostream>
#include <vector>
using namespace std;

int main(){
// vector 的申明
vector<int>v1; //定义空的vector
vector<int>v2(10); //定义大小为10 的vector
vector<int>v3(10, -1); //产生大小为10,并且每个元素都是-1的vector
vector<int>v4(v3); //用一个vector产生一个vector

int arr[5] = {1, 2, 3, 4, 5};
vector<int>v5(arr, &arr[5]); // 以区间[begin,end)作为初值的vector

cout<<"v5元素个数"<<v5.size()<<endl;
cout<<"v1是否为空:"<<(v1.empty()?"空":"非空")<<endl;
cout<<"v1可容纳的最大元素数量"<<v1.max_size()<<endl; //和电脑内存有关
cout<<"v2重新分配前所能容纳的最大元素数量:"<<v2.capacity()<<endl;

v2.reserve(20); //给v2 重新分配20个空间
cout<<"v2分配后所能容纳的最大元素数量:"<<v2.capacity()<<endl;

cout<<"v3 v4 是否相等:"<<(v3==v4?"相等":"不等")<<endl;

v1.push_back(1); // 在v1 尾部添加一个元素 1
v1.push_back(2);
v1.push_back(3);

/*
* 迭代器是随机存取迭代器,对vector来说是指针,迭代器持续有效
* 除非在一个较小索引位置插入、删除元素或者内存重新分配
*/
vector<int>::iterator it;
int i = 0;
for (it = v1.begin(); it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
}

v1.pop_back(); // 在v1的尾部删除一个元素
for (it = v1.begin(),i = 0; it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<*it<<endl;
}

v2 = v1; //将v1 的元素全部拷到v2
for (it = v2.begin(), i=0; it != v2.end(); i++, it++){
cout<<"v2["<<i<<"]="<<v2[i]<<endl;
}
cout<<"v2 的元素个数"<<v2.size()<<endl;
v2.clear(); // 将 v2 清空
cout<<"v2 的元素个数"<<v2.size()<<endl;

v2 = v1; //重新赋值
v2.assign(3, 55); // 给 v2 重新初始化为包含三个元素55的向量
for (it = v2.begin(), i=0; it != v2.end(); i++, it++){
cout<<"v2["<<i<<"]="<<v2[i]<<endl;
}
v2.assign(arr, &arr[4]);
for (it = v2.begin(), i=0; it != v2.end(); i++, it++){
cout<<"v2["<<i<<"]="<<v2[i]<<endl;
}

v1.swap(v2); // v1和v2 元素交换
// swap(v1, v2);
for (it = v1.begin(), i=0; it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
}

//cout << "v1下标为4的元素" << v1.at(4)<<endl; // 越界抛出异常
cout << "v1下标为5的元素" << v1[5]<<endl; // 越界,不检查
cout << "v1的首个元素:" << v1.front()<<endl; // v1的首个元素
cout << "v1的最后元素:" << v1.back()<<endl; // v1 的最后的元素

vector<int>::iterator pos = v1.begin();
v1.insert(pos, 12); // 在pos 位置之前插入一个元素12
v1.insert(pos, 13); // 在pos 位置之前插入一个元素12
//v1.insert(pos, 4, 55); // 在pos 位置之前插入 4 个 元素 55
for (it = v1.begin(), i=0; it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
}
v1.erase(pos); // 将 pos 位置的元素删除
for (it = v1.begin(), i=0; it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
}
v1.erase(pos, pos+3); // 从pos 位置开始连续删除 3 个元素
for (it = v1.begin(), i=0; it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
}

// v1.resize(5); // 将元素数量改成5,如果v1变大,则多的按默认来
v1.resize(5, 9); //将元素数量改成5,如果v1变大,则多的赋值为9
for (it = v1.begin(), i=0; it != v1.end(); i++, it++){
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
}
v1.clear(); //清空v1
return 0;
}

vector 学习笔记,布布扣,bubuko.com

时间: 2024-12-14 18:10:15

vector 学习笔记的相关文章

Fisher Vector学习笔记

1,背景 现有的模式分类方法主要分为两类,一类是生成式方法,比如GMM,这类方法主要反映同类数据之间的相似度:一类是判别式方法,比如SVM,主要是反映异类数据之间的差异.fisher kernel是想要结合二者的优势(1,生成式方法可以处理长度不一的输入数据,2,判别式方法不能处理长度不一的数据但是分类效果较好.),将生成式模型用于判别式分类器中. 关于处理长度不一的数据,举例说明如下: 我们要对一个图片集I=X1,X2...中的图片做分类,考虑生成式的方法,GMM,是对每一幅图片Xi=x1,.

C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: 1 /*读取txt文件到二维数组*/ 2 #include <iostream> 3 #include <fstream> 4 #include <vector> 5 #include <string> 6 7 using namespace std; 8 9 typedef vector< vector<int> > D2array; //二维数组 10 typed

C++学习笔记:Vector容器

vector v:初始化一个0大小的向量vector v(10):初始化一个10个大小的向量push_back:增加一个元素 pop:删除一个元素,不返回 front:返回第一个元素 back:返回最后一个元素 at:返回特定位置的元素 capacity:vector的容量,会自动扩大  也可以直接通过v[x]操作元素 /*: Test.cpp */ #include <iostream> #include <vector> #include <string> #inc

STL标准容器类学习笔记之(Vector/Deque/List)

STL标准容器类简介 1.顺序性容器 vector相当与数组,从后面快速的插入与删除,直接访问任何元素 deque双队列,从前面或后面快速的插入与删除,直接访问任何元素 list双链表,从任何地方快速插入与删除 2.关联容器 set快速查找,不允许重复值 multiset快速查找,允许重复值 map一对一映射,基于关键字快速查找,不允许重复值 multimap一对多映射,基于关键字快速查找,允许重复值 3.容器适配器 stack后进先出 queue先进先出 priority_queue最高优先级

C++ Primer(第五版)学习笔记_3_标准模板库vector(2)

C++ Primer(第五版)学习笔记_3_标准模板库vector(2) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 6.元素的插入 insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置. 要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标. #include <iostream> #include <vector> using namespa

C++ Primer(第五版)学习笔记_2_标准模板库vector(1)

C++ Primer(第五版)学习笔记_2_标准模板库vector(1) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 向量容器vector不但能像数组一样进行随机访问,还能在尾部插入元素,完全可以替代数组. 值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间. 容器vector的下标是从0开始的,如果vector容器的大小是n,则元素下标为0~n-1,这和数组的一样的.不一样的是,vector可以随时调整其大小. vector重要的方法有三个

C++学习笔记--标准库 vector

1 在应用vector时,要加入"using std::vector;"语句 2 对象的定义与初始化 在应用的时候,先建立一个空变量,然后再动态得增加其中的内容,这种调用方式更加的高效. 3 对象操作 vector<char> v1; (1)v1.empty();//如果v1为空,则返回1. (2)v1.pushback('a');//在v1变量中加入一个'a'的字符. (3)v1.size();//返回v1变量中元素的个数. (4)v1[0];//表示v1中的第1个元素.

嵌入式学习笔记101-uboot_1.1.6移植(1)

根据前篇博文(嵌入式学习笔记100-uboot1.1.6初体验)最后的结论,现在开始将其实现: a. 修改makefile的CROSS_COMPILE指定编译器 arm-linux-gcc -v –> gcc version 3.4.5 CROSS_COMPILE = /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/arm-linux- chmod -R 777 u-boot-1.1.6/

C++ Primer 学习笔记_98_特殊工具与技术 --优化内存分配

特殊工具与技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象. new基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些.这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象. 另外一些类希望按最小尺寸为自己的数据成员分配需要的内存.例如,