C++ 中vector的基本用法
//在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少
基本概念
vector容器是一个模板类,可以存放任何类型的对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。
1、定义和初始化
* vector< 类型名 > 标识符 (n) //定义容器大小为n
* vector< 类型名 > 标识符(最大容量,初始所有值);
eg: vector< int > ivec( 10, -1 ); 定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1
* vector<类型名> vector<typeName>v2(v1); 或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());
//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。
* 拷贝数组中的元素:int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
// 把 ia 的 6 个元素拷贝到 ivec 中 vector< int > ivec( a, a+6 );
// 拷贝 3 个元素 a[2], a[3], a[4] vector< int > ivec( &a[ 2 ], &a[ 5 ] ); //注意第二个指正要指到末尾元素的下一个元素
以下是事例:
#include<iostream>
#include <vector>
using namespace std;
int main(){
int a[ ] = { -, -, , , , };
//拷贝数组中的元素
vector< int > vec1( a, a+ );
cout<<vec1[]<<' '<<vec1[]<<' '<<vec1[]<<' '<<vec1[]<<endl; //拷贝数组中的元素
//两个指针标记了对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置
vector< int > vec( &a[ ], &a[] );
cout<<vec[]<<' '<<vec[]<<' '<<vec[]<<' '<<vec[]<<endl; //vec[3]输出错误,因为不存在 //把vec 拷贝到另一个容器中
vector< int > newone;
newone = vec;
cout<<newone[]<<endl;
return ;
}
常用方法
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 返回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器
使用迭代器
迭代器:迭代器是个所谓的智能指针,具有遍历复杂数据结构的能力,就看做是容器的专用指针吧,用容器时一般都要使用到这个,那种用数组索引的方法反而更加少用了,下面是一个简单的使用迭代器的示例:
//利用迭代器更改容器中的某一个值
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> abc;
abc.push_back(); //push几个值进去
abc.push_back();
abc.push_back();
abc.push_back(); // 迭代器遍历寻遍
for(vector<int>::iterator it = abc.begin();it!=abc.end();)
{
if(*it ==)
it = abc.erase(it);
else
++it;
}
cout << "After remove 5:\n";
for(vector<int>::iterator i = abc.begin(); i < abc.end(); ++i)
{
cout << * i << " ";
}
cout << endl;
return ;
}
以下是一些简单的程序:
定义一个二维数组
#include<iostream>
#include<vector>
using namespace std;
int main(){
int i = ,j = ; //容器内部的容器
//Array 是10行,且都为0
vector< vector<int> > Array(,vector<int>()); for(j = ; j < ; j++)
{
for (i = ; i < ; i++)
{
Array[j].push_back(i);
}
}
//输出
for( j = ; j < ; j++ )
{
for(i = ; i<Array[j].size(); i++)
{
cout << Array[j][i] << " ";
}
cout<< endl;
}
}
排序与逆向
#include<iostream>
#include<vector>
#include<algorithm>
#include <cstdlib>
using namespace std;
int main(){
vector<int> num;
int element;
while(cin>>element)
num.push_back(element); sort(num.begin(),num.end()); //从大到小排序 reverse(num.begin(),num.end()); //逆向输出 for(int i = ;i<num.size();i++)
cout<<num[i]<<endl; system("pause");
return ;
}
定义二维动态数组
#include<iostream>
#include<vector>
using namespace std;
int main(){
int i = ,j = ;
vector<vector<int> > Array;
vector<int> line;
for(j = ;j < ;j++){
Array.push_back(line); //要对每一个vector初始化,初始化列。
for (i = ; i < ; i++ )
{
Array[ j ].push_back( i );
}
} for(j = ;j < ;j++ )
{
for(i = ; i<Array[j].size(); i++)
{
cout << Array[j][i] << " ";
}
cout<< endl;
}
}
参考:http://blog.csdn.net/xiaohuizi2009/article/details/8067667
C++ 中vector的基本用法的更多相关文章
- C++中vector的remove用法
我将从remove的复习开始这个条款,因为remove是STL中最糊涂的算法.误解remove很容易,驱散所有关于remove行为的疑虑——为什么它这么做,它是怎么做的——是很重要的. 这是rem ...
- c++中vector类的用法
概括:向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能够存放任意类型的动态 ...
- (转载)C++STL中vector容器的用法
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
- c++ 中vector 常见用法(给初学者)
c++ 中 vector vector有两个参数,一个是size,表示当前vector容器内存储的元素个数,一个是capacity,表示当前vector在内存中申请的这片区域所能容纳的元素个数. ca ...
- C++中const 的各种用法
C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...
随机推荐
- 微信朋友圈如何同时分享(图片+文字) Android版
以下是:微信朋友圈SDK 分享图片的代码,但只能分享图片,不能分享文字,如何才能图片和文字同时分享?求各位大神指教! public class MainActivity extends Activit ...
- Tomcat遇到”Error listenerStart”或”Error filterStart”问题且无详细日志时的log配置.
昨天部署web应用到Tomcat之后,无法成功启动,并且控制台没有详细的错误信息,顶多就两行提示信息,例如:严重: Error listenerStart严重: Context [/lizongbo] ...
- laravel小抄
原文地址:http://cheats.jesse-obrien.ca/ Artisan // Displays help for a given command php artisan --help ...
- 【笨嘴拙舌WINDOWS】tagTEXTMETRIC结构
tagTEXTMETRIC用于定义在window输出文字时字的大小,其结构如下: 我在窗体上写了两句话,来详细解剖该结构(在MM_TEXT模式下输出) tmHeight表示一行文字的高度.改例中值为1 ...
- HDU 3790 最短路径问题【Dijkstra】
题意:给出n个点,m条边,每条边的长度d和花费p,给出起点和终点的最短距离和花费,求最短距离,如果有多个最短距离,输出花费最少的 在用dijkstra求最短距离的时候,再用一个f[]数组保存下最少花费 ...
- POJ 3692 Kindergarten (补图是二分图的最大团问题)
题意 幼稚园里有m个男孩和n个女孩(m.n范围都是[1,200]),男孩之间相互认识,女孩之间也相互认识,另外有部分男孩和女孩也认识.现在要举办一个活动,选取一些同学,要求所有选取的同学之间两两相互认 ...
- WMware 10 Ubuntu 12.04 进入Unity模式
/********************************************************************* * WMware 10 Ubuntu 12.04 进入Un ...
- android 项目随记一
1. requestWindowFeature(); requestWindowFeature可以设置的值有: // 1.DEFAULT_FEATURES:系统默认状态,一般不需要指定 ...
- Java中数组复制的几种方法
/** * @author zhengbinMac */ public class Test { public static void main(String[] args) { int[] arra ...
- 用 Javascript 获取页面大小、窗口大小和滚动条位置
页面大小.窗口大小和滚动条位置这三个数值在不同的浏览器例如 Firefox 和 IE 中有着不同的实现.即使在同一种浏览器例如 IE 中,不同版本也有不同的实现. 本文给出两个能兼容目前所有浏览器的 ...