vector动态数组
vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费。
创建vector容器
vector< int >v;vector< char >;vector< int >v[10]。
vector常用函数及功能
c.clear() 清空容器中所有元素
c.empty() 判断容器是否为空
c.pop_back() 删除容器最后一个元素
c.push_back() 在尾部加入一个元素
c.resize() 重新指定容器的长度
c.reserve() 保留适当的容量
c1.swap(c2) 交换c1和c2的值
swap(c1,c2) 同上
使用vector容器注意
vector<int>v,v相当于一个一维数组,长度不定,需注意如果当前数组v的长度为n,不可像普通数组一样写成v[n]=x,这样做是毫无意义的,但是如果在n以内,可以直接写做v[m]=x (m < n)。
在这里我要特别说一下resize()函数,先看下面的代码和输出
// resizing vector
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
vector<int> myvector;
// set some initial content:
for (int i=1;i<10;i++) myvector.push_back(i);
myvector.resize(5);
myvector.resize(8,100);
myvector.resize(12);
cout << "myvector contains:";
for (int i=0;i<myvector.size();i++)
cout << ' ' << myvector[i];
cout << '\n';
return 0;
}
Output:
myvector contains: 1 2 3 4 5 100 100 100 0 0 0 0
从这里可以很明显的看出,如果利用resize()函数减少容器的长度,很简单直接把想要保留的长度作为参数传给它,如果增加长度x,执行c.resize(n+x,a),那么新增加部分的数组的值为a,但是如果不传第二个参数给它,就会默认为0。
其他函数我就在代码中为大家展示它的功能。测试代码如下
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>p;
for(int i=0;i<10;i++)
p.push_back(i);
swap(p[2],p[1]);
for(int i=0;i<p.size();i++)
cout<<p[i]<<" ";
cout<<endl;
p.resize(7);
for(int i=0;i<p.size();i++)
cout<<p[i]<<" ";
cout<<endl;
while(!p.empty())
{
p.pop_back();
}
p.clear();
cout<<p.size()<<endl;
return 0;
}
如有不当之处欢迎指出!!
vector动态数组的更多相关文章
- C++ vector动态数组
#include<vector>头文件 vector类称作向量类 百度百科的解释:https://baike.baidu.com/item/vector/3330482 我喜欢把知识点拿出 ...
- C++向量 vector动态数组
需要包含头文件, #include <vector> using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...
- Vector(动态数组)怎么用咧↓↓↓
定义方式:vector<int> a; //二维vector<int>a[100] 在末尾压入容器:a.push_back(x);//二维 a[i].push_back(x) ...
- 八连通(vector动态数组法)
题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存.用二维的动态vector就能很好的解决这个问题 #include<bits/stdc++ ...
- C++ Vector 动态数组
Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...
- vc++简单的vector动态数组实现
#ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- 学习日记--用Vector(向量)实现动态数组
Vector的使用方法: 能在添加元素时增加长度的数组称为动态数组或可变长数组.相对地,必须事先指定长度,只能容纳一定数量元素的数组称为静态数组.下面分享一下如何借助STL(标准模板库)中的Vecto ...
- vector:动态数组
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确.它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存 ...
随机推荐
- python_10_文件操作
文件操作逻辑? 打开文件,赋值给一个对象 用对象操作文件 关闭文件 如何打开文件? 在windows中,默认格式gbk,python3.x默认unicode(utf-8),要指定编码值 语法: f = ...
- Jquery实现选项卡效果
<script type="text/javascript"> $(document).ready(function(){ $('.ct:gt(0)').hide(); ...
- Part 2:模型与后台管理admin站点--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- linux socket 编程(C语言)[转]
最近看了一些网络编程的书籍,一直以来总感觉网络编程神秘莫测,其实网络编程入门还是很容易学的,下面这些代码是我在linux下编写的,已经运行过了,编译之后就可以运行了.有不足之处希望大家多多指出,共同学 ...
- Jenkins初识
Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 功能 Jenkins功能包括 ...
- linux配置上网
重装系统之后,配置虚拟机的网络问题花了我三个小时,忘记了网关是vmnet8的IP还是DNS了,搞了很久,后来碰运气碰对了. 寄宿机共享的网络是vmnet8,设置IP,DNS,是vmnet8 的IPv4 ...
- 系统uid在1-499的原因
1.因为是保留给系统使用的UID,为了与用户设置的账户区分,防止冲突. 2.并没有其他特别的意义, 3.也叫作虚拟用户,除了0之外,所有的UID在使用上并没有任何区别. 4.linux中文件和程序都要 ...
- Java NIO之网络编程
最近在研究Java NIO和netty,曾经一度感觉很吃力,根本原因还是对操作系统.TCP/IP.socket编程的理解不到位. 不禁感叹,还是当初逃的课太多. 假如上天给我一次机会,能够再回到意气风 ...
- 浅析JAVA序列化
1.简述 Serialization(序列化) 是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 在分布式环境中,经常需要将Objec ...
- 安装redis 2.6.4
下载redis-2.6.4下载链接:http://pan.baidu.com/s/1eQ9Z8NS make MALLOC=jemalloc/server/redis2/src/redis-serve ...