vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:

#include <vector>

vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:

using std::vector;     vector<int> v;

或者连在一起,使用全名:

std::vector<int> v;

建议使用全局的命名域方式:

using namespace std;

1.vector的声明

vector<ElemType> c;   创建一个空的vector

vector<ElemType> c1(c2); 创建一个vector c1,并用c2去初始化c1

vector<ElemType> c(n) ; 创建一个含有n个ElemType类型数据的vector;

vector<ElemType> c(n,elem); 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;

c.~vector<ElemType>(); 销毁所有数据,释放资源;

2.vector容器中常用的函数。(c为一个容器对象)

c.push_back(elem);   在容器最后位置添加一个元素elem

c.pop_back();            删除容器最后位置处的元素

c.at(index);                返回指定index位置处的元素

c.begin();                   返回指向容器最开始位置数据的指针

c.end();                      返回指向容器最后一个数据单元的指针+1

c.front();                     返回容器最开始单元数据的引用

c.back();                     返回容器最后一个数据的引用

c.max_size();              返回容器的最大容量

c.size();                      返回当前容器中实际存放元素的个数

c.capacity();               同c.size()

c.resize();                   重新设置vector的容量

c.reserve();                同c.resize()

c.erase(p);               删除指针p指向位置的数据,返回下指向下一个数据位置的指针(迭代器)

c.erase(begin,end)     删除begin,end区间的数据,返回指向下一个数据位置的指针(迭代器)

c.clear();                    清除所有数据

c.rbegin();                  将vector反转后的开始指针返回(其实就是原来的end-1)

c.rend();                     将vector反转后的结束指针返回(其实就是原来的begin-1)

c.empty();                   判断容器是否为空,若为空返回true,否则返回false

c1.swap(c2);               交换两个容器中的数据

c.insert(p,elem);          在指针p指向的位置插入数据elem,返回指向elem位置的指针

c.insert(p,n,elem);      在位置p插入n个elem数据,无返回值

c.insert(p,begin,end) 在位置p插入在区间[begin,end)的数据,无返回值

std::reverse(c.begin(), c.end());//反转c中元素顺序

下面是个人在工作中使用vector的一些总结

 //使用的结构体
typedef struct tagDataStruct
{
int nVal;
double dVal;
std::string strstdString;
CString strCString;
}DataStruct; bool _CompareFun (const DataStruct& item1, const DataStruct& item2)
{//结构体排序方法
//bool bRet = (item1.nVal < item2.nVal) ? true : false;//升序排列
bool bRet = (item1.nVal > item2.nVal) ? true : false;//降序排列
return bRet;
}
bool findx(DataStruct &task)
{//结构体查找方法
return task.strstdString == "";
} void CLoadDllDemoDlg::OnBnClickedButton16()
{//STL
std::vector<std::string>vecString;
for(int i = ; i < ; i++)
{
std::string str = "demo";
int n = atoi(str.c_str());
std::string strAdd;
std::stringstream ssCov;
ssCov<<i;
ssCov>>strAdd;
str.append(strAdd);
vecString.push_back(str);
}
/////////////////////////////////int数据///////////////////////////////////////////////////
std::vector<int>vecInt;
for(int i = ; i > ; i--)
{//添加数据
vecInt.push_back(i);
} /*排序*/
std::sort(vecInt.begin(), vecInt.end()); /*查找数据*/
std::vector<int>::iterator itFind = find(vecInt.begin(), vecInt.end(), );
if(itFind != vecInt.end())
{//找到数据
std::string strTip = "提示";
} /*删除数据*/
if(itFind != vecInt.end())
{
vecInt.erase(itFind);
}
/*遍历数据使用传统方法or迭代器*/
for(UINT i = ; i < vecInt.size(); i++)
{
int nVal = vecInt[i];
}
std::vector<int>::iterator it;
for(it = vecInt.begin(); it != vecInt.end(); it++)
{
int nVal = *it;
}
/*清空数据*/
vecInt.clear();//ps:只是清空数据
vecInt.swap(std::vector<int>());//ps:清空数据,并且清理内存 /////////////////////结构体vector///////////////////////////////////
std::vector<DataStruct>vecDataStruct;
for(int p = ; p < ; p++)
{
DataStruct datastruct;
datastruct.nVal = p;
datastruct.dVal = double(p);
std::stringstream ssCov;
ssCov<<p;
ssCov>>datastruct.strstdString; datastruct.strCString.Format(_T("%d"), p);
vecDataStruct.push_back(datastruct);
}
/*排序*/
std::sort(vecDataStruct.begin(), vecDataStruct.end(), _CompareFun);
/*结构体查找数据*/
DataStruct dataStr;
std::vector<DataStruct>::iterator itStruct = find_if(vecDataStruct.begin(), vecDataStruct.end(), findx);
if(itStruct != vecDataStruct.end())
{//找到
std::string strFind = "找到";
}
}
 void CLoadDllDemoDlg::OnBnClickedButton33()
{//vector删除
std::vector<int>vecDemo;
for(int i = ; i < ; i++)
{
vecDemo.push_back(i);
}
//while循环删除
vector<int>::iterator itEarse=vecDemo.begin();
while(itEarse!=vecDemo.end())
{
if(*itEarse==)
{
itEarse=vecDemo.erase(itEarse);
}
else
{
++itEarse;
}
} //for循环删除
vector<int>::iterator ite;
for(ite=vecDemo.begin();ite!=vecDemo.end();)
{
if(*ite==)
{
ite=vecDemo.erase(ite);
}
else
{
++ite;
}
}
std::reverse(vecDemo.begin(), vecDemo.end());
}

C++ STL vector使用总结的更多相关文章

  1. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  2. STL vector

    STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...

  3. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  4. STL vector+sort排序和multiset/multimap排序比较

    由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...

  5. STL vector 用法介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  6. STL vector使用方法介绍

    介绍 这篇文章的目的是为了介绍std::vector,怎样恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  7. stl——vector详解

    stl——vector详解 stl——vector是应用最广泛的一种容器,类似于array,都将数据存储于连续空间中,支持随机访问.相对于array,vector对空间应用十分方便.高效,迭代器使ve ...

  8. C++STL vector详解(杂谈)

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  9. C++ stl vector介绍

    转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...

  10. 浅谈C++ STL vector 容器

    浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...

随机推荐

  1. java 线程 被相互排斥堵塞、检查中断演示样例解说----thinking java4

    package org.rui.thread.block; /** * 被相互排斥堵塞 就像在interrupting.java中看到的,假设你偿试着在一个对象上调用其synchronized方法, ...

  2. (扫盲)jQuery extend()和jQuery.fn.extend()的区别

    1.认识jQuery extend()和jQuery.fn.extend() jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,但在jQuery内部 ...

  3. [2018-08-25]模板引擎Razor Engine 用法示例

    好久没写博客了,回宁波后最近几个月一直忙些线下的事情. 敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快. 最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库 ...

  4. h大数据

    安全认证 hw HBase安全认证(创建HBaseHolder时认证) String userPrincipal = FeatureContext.INSTANCE.getOrElse(Constan ...

  5. Swift 烧脑体操(三) - 高阶函数

    前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困 ...

  6. P3968 [TJOI2014]电源插排

    P3968 [TJOI2014]电源插排 线段树维护最长空区间及左端点位置,这个和$nlongn$的动态最大子序和差不多,就不多解释了 $n$较大哈希优化空间 My complete code: #i ...

  7. 郝健: Linux内存管理学习笔记-第1节课【转】

    本文转载自:https://blog.csdn.net/juS3Ve/article/details/80035751 摘要 MMU与分页机制 内存区域(内存分ZONE) LinuxBuddy分配算法 ...

  8. echarts如何显示在页面上

    echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src="js/echarts.min.js"></script> ...

  9. Starting MySQL.. ERROR! The server quit without updating PID file

    版权声明:本文为博主原创文章,未经博主允许不得转载. 注意:本文出自 “阿飞”的博客 ,如果要转载本文章,请与作者联系! 并注明来源: http://blog.csdn.net/faye0412/ar ...

  10. AtCoder Grand Contest #026 A - Colorful Slimes 2

    Time Limit: 2 sec / Memory Limit: 1024 MB Score : 200200 points Problem Statement Takahashi lives in ...