1.在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。

(1)头文件#include<vector>.

(2)创建vector对象,vector<int> vec;

(3)初始化vector对象,vector<T> v1;  类型为T的默认初始化

vector<T> v2(n,val); v2中包含了n个类型为T值为val的元素

vector<T> v3{  a, b, c ...  }; 列表初始化

注:vector<int> v1{10,1}; v1有两个 元素 0和1

vector<int> v2(10,1); v2有十个元素,每个都是1

(4)尾部插入元素:vec.push_back(a);

(5)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

(6)使用下标访问元素,cout<<vec[0]<<endl;但是不能直接赋值,vec[0]=1//!!严重错误。

(7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:      vec.size();

(9)清空:             vec.clear();

(10)使用sort排序:需要头文件#include<algorithm>,

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

可以通过重写排序比较函数按照降序比较,如下:

bool Comp(const int &a,const int &b)
   {
    return a>b;
   }
    调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。

2. 迭代器比下标运算符更通用,所有标准库容器都可以使用迭代器。(string对象不属于容器类型,但同样支持)

(1) 迭代器访问元素

使用begin成员返回指向第一个元素,end指向尾元素的下一位置。(即并不存在的尾后元素)

string s("some string");
for(auto it=s.begin();it!=s.end()&&!isspace(*it);++it)
*it=toupper(*it)//当前字符改成大写形式

(2) 解引用获得所指对象

(*it).empty; //检查所指字符串是否为空

(3) 箭头运算符->

it->empty();

(4)使用迭代器的循环体,不能向迭代器所属容器添加元素。(终止条件失效)

(5)使用迭代器进行二分搜索

#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> text{1,2,3,4,5,6,7,8,9,10};
int sought;
cin>>sought;
//迭代器二分搜索,text必须有序
auto beg=text.begin(),end=text.end();
auto mid=beg+(end-beg)/2;
while(mid!=end&&*mid!=sought){
if(sought<*mid)
end=mid;
else
beg=mid+1;
mid=beg+(end-beg)/2;
}
if(mid==end)
cout<<"not found.\n";
else
cout<<*mid<<" is found.\n";
return 0;
}

c++ vector用法和迭代器的更多相关文章

  1. C++杂谈(二)初识vector容器与迭代器

    教科书中失踪的vector 很奇怪的一件事情,在当时学习C++的时候,老师并没有讲授容器的内容,当时参考的谭浩强老师的红皮C++也没有这个内容,不知为何.后来再学C++,发现容器是一个很重要的概念,在 ...

  2. vector容器+iterator迭代器

    关于vector容器的详细描述,可参考:http://www.jb51.net/article/41648.htm   关于iterator迭代器的描述,可参考http://www.cppblog.c ...

  3. java-Collection集合、List集合、Vector集合和迭代器Iterator、ListIterator的使用

    1.对象数组的概述和使用 * A:案例演示 * 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. * Student[] arr = new Student ...

  4. 【经验】STL的list vector在iterator迭代器的循环中 使用erase 造成的BUG

    #include <iostream> #include <list> #include <vector> using namespace std; typedef ...

  5. 实战c++中的vector系列--将迭代器转换为索引

    stl的迭代器非常方便 用于各种算法. 可是一想到vector.我们总是把他当做数组,总喜欢使用下标索引,而不是迭代器. 这里有个问题就是怎样把迭代器转换为索引: #include <vecto ...

  6. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

  7. stl vector、红黑树、set、multiset、map、multimap、迭代器失效、哈希表(hash_table)、hashset、hashmap、unordered_map、list

    stl:即标准模板库,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法 六大组件: 容器.迭代器.算法.仿函数.空间配置器.迭代适配器 迭代器:迭代器(iterator)是一种抽象的设计 ...

  8. C++标准库vector以及迭代器

    今天看C++的书,出现了一个新的概念,容器vector以及容器迭代器. vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. ...

  9. C++标准库vector及迭代器

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

随机推荐

  1. PyCharm 的初始设置2 - 打开、新建项目

    03. 新建/打开一个 Python 项目 3.1 项目简介 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 – ...

  2. [eBook]Inside Microsoft Dynamics AX 2012 R3发布

    最近一本关于Microsoft Dynamics AX 2012开发的书<Inside Microsoft Dynamics AX 2012 R3> 发布. Book Descriptio ...

  3. python中的excel操作

    一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...

  4. JS开发页面小组件:table组件

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. stl_algo.h

    stl_algo.h // Filename: <stl_algo.h> // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...

  6. I.MX6 dts 在哪里、怎么编译

    /************************************************************************ * I.MX6 DTS 在哪里.怎么编译 * 说明: ...

  7. Uncaught TypeError: this.canvas.getContext is not a function

    /**************************************************************************** * Uncaught TypeError: ...

  8. 洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...

  9. ntp 配置 autokey 功能【摘录】

    摘录于ntp官网:http://support.ntp.org/bin/view/Support/ConfiguringAutokey 6.7. Autokey Configuration for N ...

  10. C的随想

    c用的是操作系统函数,这个一下子就限制了APi的数量,通过组合这些系统api即可实现功能. c开发的人一般都会熟记系统函数,然后需要确定函数参数的时候,通过man指令进行查看 对于32位64位将会导致 ...