STL--向量(vector)
STL的组成
- 序列式容器(Sequence containers)
- 每个元素都有固定位置--取决于插入时机和地点,和元素值无关。
- vector(向量)、deque(双端队列)、list(表)
- 关联式容器(Associated containers)
- 元素位置取决于特定的排序准则,和插入顺序无关
- set(集合)、multiset(多重集合)、
- pmap(映射)、multimap(多重映射)
- 默认构造函数,构造一个初始长度为0 的空向量,如: vector<int> v1 ;
- 带有单个整形参数的构造函数,此参数描述了向量的初始大小。这个构造函数还有一个可选的参数,这是一个类型为T的实例,描述了这个向量中各成员的初始值;如: vector<int> v2(n,0); 如果预先定义了 n, 他的成员值都被初始化为0;
- 复制构造函数,构造一个新的向量,作为已存在的向量的完全复制,如: vector<int> v3(v2) ;
- 带两个常量参数的构造函数,产生初始值为一个区间的向量。区间由一个半开区间 [ first,last ) 来指定。如: vector<int> v4(first,last)
#include <cstring>
#include <vector>
#include <iostream>
using namespace std;
int ar[] = { , , , , , , , , , };
char* str = "Hello World";
int main()
{
vector <int> vec1(ar, ar + ); // first=ar,last=ar+10, 不包括ar+10
vector < char > vec2(str, str + strlen(str)); // first=str,last= str+strlen(str)
cout << "vec1:" << endl;
// 打印vec1 和vec2 ,const_iterator 是迭代器,后面会讲到
// 当然,也可以用for (int i=0; i<vec1.size(); i++)cout << vec[i]; 输出
//size() 是vector 的一个成员函数
for (vector<int>::const_iterator p = vec1.begin();p != vec1.end(); ++p)
cout << *p;
cout << '\n' << "vec2:" << endl;
for (vector< char >::const_iterator p1 = vec2.begin();p1 != vec2.end(); ++p1)
cout << *p1;
cout << '\n';
return ;
}
vector操作:
- myvec.clear() 移除容器中所有数据。
- myvec.push_back(elem) 在尾部加入一个数据elem。
- myvec.pop_back() 删除最后一个数据。
- myvec.size() 返回容器中实际数据的个数,类型为size_type。
- myvec.erase(pos) 删除pos位置的数据,返回下一个数据的位置。
- myvec.insert(pos,cnt,elem) 在pos位置插入cnt个数据elem。
- myvec.begin() 返回的指针指向数组中的第一个数据。
- myvec.end() 实际上是取末尾加一,以便让循环正确运行--它返回的指针指向最靠近数组界限的数据。
- myvec.empty() 判断容器是否为空。
- operator[] 返回容器中指定位置的一个引用
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> INTVECTOR;// 自定义类型INTVECTOR
int main() { // 测试vector 容器的功能
INTVECTOR vec1;//vec1 对象初始为空
INTVECTOR vec2(, );//vec2 对象最初有10 个值为6 的元素
INTVECTOR vec3(vec2.begin(), vec2.begin() + );//vec3 对象最初有3 个值为6 的元素,拷贝构造
INTVECTOR::iterator i;// 声明一个名为i 的双向迭代器
cout << "vec1.begin()--vec1.end():" << endl;// 从前向后显示vec1 中的数据
for (i = vec1.begin(); i != vec1.end(); ++i) cout << *i << " "; cout << endl;
cout << "vec2.begin()--vec2.end():" << endl;// 从前向后显示vec2 中的数据
for (i = vec2.begin(); i != vec2.end(); ++i) cout << *i << " "; cout << endl;
cout << "vec3.begin()--vec3.end():" << endl;// 从前向后显示vec3 中的数据
for (i = vec3.begin(); i != vec3.end(); ++i) cout << *i << " "; cout << endl;
// 测试添加和插入成员函数,vector 不支持从前插入
vec1.push_back(); // 从后面添加一个成员
vec1.push_back();
vec1.insert(vec1.begin() + , );// 在vec1 第一个的位置上插入成员5
vec1.insert(vec1.begin() + , vec3.begin(), vec3.end());// 从vec1 第一的位置开始插入vec3 的所有成员
cout << "after push() and insert() now the vec1 is:" << endl;
for (i = vec1.begin(); i != vec1.end(); ++i) cout << *i << " ";
cout << endl;
// 测试赋值成员函数
vec2.assign(, ); // 重新给vec2 赋值,8 个成员的初始值都为1
cout << "vec2.assign(8,1):" << endl;
for (i = vec2.begin(); i != vec2.end(); ++i)
cout << *i << " ";
cout << endl;
// 测试引用类函数
cout << "vec1.front()=" << vec1.front() << endl;// vec1 第零个成员
cout << "vec1.back()=" << vec1.back() << endl;// vec1 的最后一个成员
cout << "vec1.at(4)=" << vec1.at() << endl;// vec1 的第五个成员
cout << "vec1[4]=" << vec1[] << endl;
// 测试移出和删除
vec1.pop_back();// 将最后一个成员移出vec1
vec1.erase(vec1.begin() + , vec1.end() - );// 删除成员
cout << "vec1.pop_back() and vec1.erase():" << endl;
for (i = vec1.begin(); i != vec1.end(); ++i)
cout << *i << " ";
cout << endl;
// 显示序列的状态信息
cout << "vec1.size(): " << vec1.size() << endl;// 打印成员个数
cout << "vec1.empty(): " << vec1.empty() << endl;// 清空
return ;
}
STL--向量(vector)的更多相关文章
- C++STL之Vector向量详解,用法和例子 一起学习 一起加油
C++ STL之vector用法总结 1 ...
- C++向量(Vector)
向量Vector: 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template L ...
- ###STL学习--vector
点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...
- (转) 学习C++ -> 向量(vector)
vector是向量类型,它是一种对象实体,具有值,所以可以看作是变量. 它可以容纳许多其他类型的相同实体,如若干个整数,所以称其为容器. vector类与一般的Array类的区别在于: 1 ...
- STL学习:STL库vector、string、set、map用法
本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- c++基础之向量Vector
首先和string一样要在开头 #include <vector> #include <string> 和string一样,也算是一种容器,而且同属于STL(standard ...
- C++ STL之Vector
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. vector 属于STL(Standard Template Library, 标准模板库)中的一种自定义的 ...
- C++-STL:vector用法总结
目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...
随机推荐
- JavaScript 32位整型无符号操作
在 JavaScript 中,所有整数字变量默认都是有符号整数,这意味着什么呢? 有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数. 数值范围从 -2^ ...
- [转]make: 警告:检测到时钟错误。您的创建可能是不完整的。
转自http://blog.csdn.net/maopig/article/details/6599660 我在make的时候也出现了同样的问题,不过不是什么大问题,这个不影响编译结果 分析原因可能是 ...
- Click Models for Web Search(1) - Basic Click Models
这篇文章主要是介绍一些基本的click model,这些不同的click model对用户与搜索结果页的交互行为进行不同的假设. 为了定义一个model,我们需要描述出observed variabl ...
- Android学习笔记之布局技巧以及布局中的细节介绍....
PS:休息两天,放一放手上的东西,做做总结... 学习内容: 1.Android中LinearLayout布局技巧... 2.layout中drawable属性的区别... 先简单的介绍一下dra ...
- C#中this的 四种 用法
C#中的this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码. this用法1:限定被相似的名称隐藏的成员 /// < ...
- [CLR via C#]13. 接口
一.类和接口继承 在Microsoft.Net Framwork中,有一个名为System.Object的类,它定义了4个公共实例方法:ToString, Equals, GetHashCode和Ge ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- WPF 程序自删除(自毁)|卸载程序删除
一般是在MainWindow_Closed 事件中调用批处理命令删除. 在借鉴别人的想法的基础上的算是改进. 自删除步骤: 1.删除文件 2.删除存放文件夹. 实现代码: private static ...
- 简单使用Dos命令关闭计算机
作为一个刚进It行业的新手,我比较喜欢搜寻一些对我有帮助的东西,下面是用本机的dos命令关机的例子: 用window+r打开运行窗口,输入cmd,进入控制台,查找关机的相关命令,输入shutdown. ...
- 后缀数组---Musical Theme
POJ 1743 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes t ...