//在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少

基本概念

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的基本用法的更多相关文章

  1. C++中vector的remove用法

      我将从remove的复习开始这个条款,因为remove是STL中最糊涂的算法.误解remove很容易,驱散所有关于remove行为的疑虑——为什么它这么做,它是怎么做的——是很重要的. 这是rem ...

  2. c++中vector类的用法

    概括:向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能够存放任意类型的动态 ...

  3. (转载)C++STL中vector容器的用法

     vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...

  4. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  5. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  6. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  7. 【转】java.util.vector中的vector的详细用法

    [转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...

  8. c++ 中vector 常见用法(给初学者)

    c++ 中 vector vector有两个参数,一个是size,表示当前vector容器内存储的元素个数,一个是capacity,表示当前vector在内存中申请的这片区域所能容纳的元素个数. ca ...

  9. C++中const 的各种用法

    C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...

随机推荐

  1. Oracle数据库之三

    子查询 -- 就是在一个查询中包含多个select语句(一般就2个) select id,first_name,dept_id from s_emp; 想查询和Ben一个部门的员工的id,first_ ...

  2. Spring+Hibernate配置多数据源

    配置说明 在实际应用中,经常会用到读写分离,这里就这种情况进行Spring+Hibernate的多数据源配置.此处的配置只是让读的方法操作一个数据库,写的方法操作另外一个数据库. 注:我这里的配置JD ...

  3. JAVA使用DES加密算法加密解密

    程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...

  4. HDU 3389 (Nim博弈变形) Game

    参考了众巨巨的博客,现在重新整理一下自己的思路. 首先在纸上画了一下转移图: 1 3 4号盒子是不能够再转移卡片到其他盒子中去了的,其他盒子中的卡片经过若干步的转移最终也一定会转移到1 3 4号盒子中 ...

  5. 配置域名服务器报错named[822]: dns_rdata_fromtext /etc/bind/db.asertest.com mail not a valid number

    问题描述: 为了配置邮件服务器,更改了相关域名,改完后,重启bind9报错 Mar 17 14:39:39 DnsServer2 named[822]: dns_rdata_fromtext: /et ...

  6. watch 命令实时命令执行监控

    watch 命令   watch -d -n 1 'df; ls -FlAt /path' 在使用这条命令时你需要替换其中的 /path 部分,watch 是实时监控工具,-d 参数会高亮 显示变化的 ...

  7. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  8. 下载个jquery-easyui-1.3.0使用,把他导入到myeclipse10里,jquery-1.7.2.min.js报错。 错误如下, Syntax error on token "Invalid Regular Expression Options", no accurate correc

    1.选中报错的jquery文件“jquery-1.2.6.min.js”.2.右键选择 MyEclipse-->Exclude From Validation .3.再右键选择 MyEclips ...

  9. 3500常用汉字与标点符号(已排除不支持GB2312的)

    .?!,.::“”‘’…()<>〈〉[].,:;!?-'_"'()[]<>|&~;+-*/=<>0123456789ABCEFGHIJKLMNOP ...

  10. windows7操作系统64位安装ArcSDE10.1和Oracle11g

    安装环境如下: Oracle11g R2 64位服务端Oracle11g R2 32位客户端(管理员,第二项)ArcSDE10.1 for Oracle11g SDE数据库可由其它机器安装Arcata ...