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. js中介者模式

    中介者模式(Mediator),用一个中介者对象来封装一系列对象交互.中介者使各对象不需要显示地相互引用,从而使其松散,而且可以独立地改变它们之间的交互. 从生活中例子自然知道,中介者模式设计两个具体 ...

  2. Android国际化-图片国际化和文本字符国际化

    注意: 1.是在res目录下面,新建文件夹 2.需要国际化的文本资源和图片资源名称是一样的 图片国际化 默认:drawable-xhdpi 中文简体:drawable-zh-rCN-xhdpi(或者不 ...

  3. 这样子覆盖jquery的$

    window.$ = function(){ alert('nihao'); } window.ad = function(){ alert('nihao1'); } !function($){ $( ...

  4. 解决:cmd中运行monkeyrunner monkey_recorder.py报错: Can't open specified script file

    看lynnLi的博客monkeyrunner之录制与回放(七),遇到了一个问题,我在cmd中输入monkeyrunner monkey_recorder.py,却报错了: 当时第一个感觉时,先到\sd ...

  5. 【微信小程序+ES6新特性应用】字符串模板:美元符号$+大括号{}变量的写法

    1.字符串模板简介 ES6新特性中的字符串模板允许使用英文字符抑音符号`(提示:这里我们不能将其理解为单引号)来创建字符串,并且在该字符串中可以包含都[美元符号+大括号]包裹的变量 格式:consol ...

  6. (转) Android Fragment完全解析,关于碎片你所需知道的一切

    我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activity也有它的局限性,同样的界面在手机 ...

  7. 201621123014《Java程序设计》第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...

  8. len(),range()函数

    len()函数返回字符串.列表.字典.元组等长度 eg1:计算字符串的长度: >>>s='hello good boy doiido' >>>len(s) > ...

  9. BRICH

    一.简介 Brich是典型的基于层次的聚类算法.最大的特点就是适合数据量特别大的数据集,处理速度很快,因为该算法扫描一遍数据集. 该算法是利用了一个树状结构来快速聚类,该结构类似平衡B+树.每一个叶子 ...

  10. 如何使用SOCKET 发送HTTP1.1 GET POST请求包

    http://blog.csdn.net/yc0188/article/details/4741871 http://docs.linuxtone.org/ebooks/C&CPP/c/ch3 ...