精华内容
下载资源
问答
  • 两种写法: int index = &... vector<int> nums{10, 1, 2, 4, 7, 2}; auto it = nums.begin(); it += 4; int index = &*it - &nums[0]; //index 即为it对应元素的下标 int inde.

     两种写法:

    int index = &*it - &nums[0];
    int index1 = it - nums.begin();
    int main()
    {
        vector<int> nums{10, 1, 2, 4, 7, 2};
        auto it = nums.begin();
        it += 4;
        int index = &*it - &nums[0]; //index 即为it对应元素的下标
        int index1 = it - nums.begin(); //index 为it对应元素的下标,两种方式都可
        cout << index1 << endl;
        cout << index << endl;
        cout << *it;
    }  

    输出:

    展开全文
  • 迭代器(iterator)

    2020-11-19 00:33:05
    迭代器(iterator) ...获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员 例程: string s(“some string”) if (s.bigen() != s.end()) { ​ auto it = s.begin(); ​ *it=toupper(*it); } 标准

    迭代器(iterator)

    严格来说,string对象不属于容器类型,但是string支持许多与容器类型相似的操作

    所有容器类都支持迭代器,但只有vector等几种才支持下标运算符

    (string,vector都支持下标运算符、迭代器)

    获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员

    例程:

    string s(“some string”)

    if (s.bigen() != s.end())

    {

    ​ auto it = s.begin();

    ​ *it=toupper(*it);

    }

    标准容器迭代器的运算符:

    *iter 返回迭代器iter所指元素的引用
    iter->mem 解引用iter并获取该元素的名为mem的成员,等价于(*iter).mem
    ++iter 令iter指示容器中的下一个元素
    –iter 令iter指示容器中的上一个元素
    iter_1==iter_2 判断两个迭代器是否相等,如果指示同一个元素或者是同一个容器的尾后迭代器,则True
    iter_1!=iter_2 反之,不相等

    将迭代器从一个元素移动到另外一个元素

    迭代器使用++运算符从一个元素移动到下一个元素,迭代器的递增运算符是将迭代器“向前移动一个位置”

    (把一个字符串中的第一个单词全变成大写)

    for (auto it=s.begin;it!=s.end() && !isspace(*it);++it)

    {

    ​ *it=toupper(*it);

    }

    (所有标准库容器的迭代器都定义了==和!=,但是它们大都没有定义<运算符)

    因此,在使用迭代器时要养成使用!的习惯

    迭代器类型(不是很重要)

    vector::iterator it;//it 能读写元素

    string::iterator it;//it 能读写字符

    vector::const_iterator it;//it只能读元素

    string::const_iteractor it;//it 只能读字符

    常量迭代器与迭代器“变量”

    begin end;cbegin cend

    结合解引用和成员访问操作

    (*it).empty()

    it->empty()

    //依次输出text的每一行直至遇到第一个空白行为止

    for (auto it=text.cbegin();it!=text.cend() && !it->empty();++it)

    {

    ​ cout << *it <<endl;

    }

    某些对vector对象的操作会使迭代器失效

    任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效

    谨记,但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素

    迭代器运算

    使迭代器跨越更多的元素

    两个迭代器相减,返回这两个迭代器之间的距离

    迭代器大小比较——前后顺序比较

    //计算得到最接近容器a的中间元素的一个迭代器

    auto mid=a.begin()+a.size()/2;

    if(it<mid)//处理前半段的元素

    使用迭代器运算——二分搜索

    auto beg=text.begin();

    auto end = text.end();

    auto mid=text.begin()+(end-beg)/2;

    while(mid!=end && *mid!=sought)

    {

    if (sought<*mid)

    end=mid;

    else

    beg=mid+1;

    mid=beg+(end-beg)/2;

    }

    展开全文
  • 迭代器介绍

    2015-04-23 18:44:01
    获取迭代器不是使用取地址符,而是具有迭代器的类型同时会拥有返回迭代器的成员。比如:begin和end,其中begin成员负责返回指向第一个元素的迭代器,end成员负责返回指向容器尾元素的下一位的迭代器,也就是说,该...

    我们知道可以使用下标运算符来访问string对象的字符或vector对象的元素,还有一种更通用的机制也可以实现同样的目的,这就是迭代器

     1. 迭代器的使用

    获取迭代器不是使用取地址符,而是具有迭代器的类型同时会拥有返回迭代器的成员。比如:begin和end,其中begin成员负责返回指向第一个元素的迭代器,end成员负责返回指向容器尾元素的下一位的迭代器,也就是说,该迭代器自带的元素是一个本不存在的“尾后”元素,这样的迭代器仅作为一个标记,表示我们已经处理完容器中的所有元素。如果容器为空,则begin和end返回的是同一个迭代器,即尾后迭代器!

    • 迭代器的运算符
    *iter              //返回迭代器iter所指元素的引用
    iter->men         //解引用iter并获取该元素的名为men的成员,等价于(*iter.men)
    ++iter            //令迭代器指向容器中的下一个元素
    iter1==iter2     //判断两个迭代器是否相等

    注意:执行解引用的迭代器必须合法并确实指示着某个元素

    示例:将字符串的第一个字母大写!
    string s("some string");
    if(s.begin() !=s.end())
    {
           auto it=s.begin();
           *it=toupper(*it);
    }

    示例:将字符串的第一个单词改为大写
    string s("some string");
    for(auto it=s.begin();it !=s.end() && !isspace(*it);++it)
         *it=toupper(*it);
    • 迭代器的类型
    就像不知道string和vector的size_type成员到底是什么类型一样,一般来说我们也不知道迭代器的精确类型。而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型:
    vector<int>::iterator it;
    string::iterator it2;
    
    结合解引用和成员访问操作:
    (*it).emty()
    it->empty();    //这两种方式实现的效果是相同的
    注意:任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
    • 迭代器的运算
    iter + n
    iter+=n
    iter1-iter2
    iter1<iter2
    迭代器可以实现类似的运算功能
    至此,迭代器的介绍结束!





    展开全文
  • C++之迭代器

    2016-08-08 16:36:00
    迭代器的概念 迭代器是用来访问string对象或vector对象的...不同于指针,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员; 比如,这些类型拥有名为begin和end的成员,begin成员负责返回指向...

    迭代器的概念

    迭代器是用来访问string对象或vector对象的元素的,类似于下标运算和指针。

    其对象是容器中的元素或string对象中的字符;

    使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。

    迭代器的使用

    不同于指针,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员;

    比如,这些类型拥有名为begin和end的成员,begin成员负责返回指向第一个元素(或第一个字符)的迭代器,end成员则负责返回指向容器“尾元素的下一个位置”的迭代器;

    如果迭代器为空,则begin和end返回的是同一个迭代器;

    标准容器迭代器的运算符

    和指针类似,也能通过解引用迭代器来获取它所指向的元素,执行解引用的迭代器必须合法并确实指向着某个元素。

    string  s("some String");
    if (s.begin() !=s.end() )  //确保s非空
    {
       auto it=s.begin(); //it 表示s的第一个字符
       *it=toupper(*it);
    }

    迭代器类型

     begin与end运算符

    结合解引用与成员访问操作

     解引用迭代器可以获得迭代器所指向的对象(类似与指针)。例如:若it是Vector对象的迭代器,

    检查其元素是否为空,只需检查it所指向的字符串是否为空;

    (*it).empty();   // it->empty();

    某些对vector对象的操作会使迭代器失效

    但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素;

    迭代器运算

     

    迭代器的算术运算

    可以令迭代器和一个整数值相加(或相减),其返回值是向前(或向后)移动了若干个位置的迭代器。

    auto mid = vi.begin() + vi.size() / 2; //vi.size()=10,则mid指向元素是vi[10]
    if(it<mid) //处理vi前半部分的元素

    使用迭代器运算(二分搜索)

    代码

    指针也是迭代器

    指向数组元素的指针拥有更多功能

    转载于:https://www.cnblogs.com/iloverain/p/5749676.html

    展开全文
  • vector是相同类型对象的集合,集合中的每个对象有个对应的索引。...2、通过迭代器访问尽管可以使用下标来访问vector的元素,但更一般的机制是使用迭代器(iterator)。上面是最常用的两种方式,下面介绍使用C++11新特...
  •  获取迭代器返回迭代器中的迭代器。 例如  string s = "hello"; 则 s.begin(); 获取了第一个迭代器,也就是'h'的地址;  s.end(); 获取了最后一个迭代器,是'o'的后一个迭代器,可以说就是一个空的...
  • <基于 C++ Primer P95> 迭代器是一种相较于下标运算符而言更为通用的访问 string 对象的字符或 vector 对象的元素的机制。因为除了 vector 之外,标准库...2.与指针类型不同,获取迭代器不使用取地址符,有迭代器
  •  和指针不同的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员: auto b = v.begin(), e = v.end();   begin成员负责返回指向第一个元素的迭代器,end成员负责返回指向容器尾元素...
  • 迭代器介绍 我们已经知道可以使用下标运算符来访问string对象的字符或者vector对象的元素,还有一种更为通用的机制来实现相同的目的,这就是迭代器。  类似于指针类型,迭代器也... 1.1获取迭代器有专门的类型同时
  • 使用迭代器 //迭代器是访问string对象的字符、vector对象的元素及其他容器元素的一种机制,所有标准库容器都可以使用迭代器,适用范围大于下标运算符 #include <... //获取迭代器和指针不同,不使用取地址
  • 为什么要迭代器? 我们知道,对于集合来说,有的有下标(如ArrayList LinkedList Vector),有的没有...迭代器,即Collection集合元素通用的获取方式。取出元素之前判断集合中是否有元素,如果有,就取出来,知道直...
  • Vector需要注意的事项

    2018-08-31 08:55:09
    1.对于vector下标进行操作时,可以读取已经存在的元素,但是不能随意插入元素。试图获取不存在的元素会产生运行错误:缓冲区溢出; 2.迭代器使用时,begin指向第一个元素,end指向末端元素的下一个;同时对于非...
  • (1)迭代器 (2)下标 (3)front() 和 back()成员函数 (4)at()成员函数 如下所示,得到首尾元素都有4个方法。 #include <iostream> #include <string> #include <vector> #include <...
  • C++总结篇(5)vector

    2019-10-20 13:04:05
    vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。...begin+end: begin获取第一个位置的迭代器,end获取最后一个数据下一个位置的迭代器。 rbegin+rend: rb...
  • Java集合-Vector

    2018-03-05 20:43:57
    Vector底层是一个可增长的Object数组集合,可根据整型index下标获取Vector集合元素,Vector的大小会在集合添加元素或删除元素后...在用迭代器遍历Vector集合对象时,如果遍历过程中对集合对象的内容进行了修改(...
  • C++ vector 注意事项

    2016-11-26 18:33:05
    (1)头文件#include. (2)创建vector对象,vector vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout而且下标...(5)使用迭代器访问元素. vectorint>::iterator it; for(it=vec.begin();it!=vec.end
  • 转自郭春阳,总结一下。... begin(): 获取vector第一个元素的迭代器。 end():获取最后一个元素的下一个位置,就是空位置。 优点:end()在循环时方便使用,只要没到end()则可一直访问值 不必对空...
  • 0 文章目录 什么是关联容器 map set 用法总结 / 区别 ...与指针不同的是,获取迭代器不是使用取地址符,它同时返回迭代器的成员。比如名为begin end 的成员: begin 返回指向第一个元素的迭代器; e
  • C++学习笔记(二代目)

    2021-01-12 23:25:06
    迭代器感觉上像是下标指示符的高级版本 vector和string都支持迭代器 一、试用迭代器 //由编译器决定b和e的类型 //b表示v的第一个元素,e表示v尾元素的下一位置 auto b=v.begin(), e=v.end(); //b和e的类型相同 二、...
  • 1. 第十六天的回顾,集合是容器,...存储add方法,获取用的就是迭代器。List派系,重复,下标,有序。ArrayList:长度可变数组,线程不安全,每次增长原基础50%,查询快,增删慢   2. 第十七天的学习内容:List集合
  • c++学习笔记小记(6)

    2018-07-03 00:57:03
    ----------------迭代器介绍---------------通过下标可以访问vector或者string类型对象的元素,还可以通过另外一种方式实现同样的目的------迭代器获取迭代器不是使用取地址符&amp;,因为有迭代器的类型同时拥有...
  • STL常用函数

    2021-01-06 19:23:23
    //定义了一个叫iter的vector迭代器变量 //加入新元素 words.push_back(s); //获取vector大小 words.size(); //遍历vector for(int i=0;i<word.size();i++) //注意,它和数组一样,下标从0开始 //用sort对vector...
  • C++数组和指针

    2017-12-17 17:35:54
    数组和指针是C++的两种类似于vector迭代器的低级复合类型。平时应当尽量使用vector迭代器,只有在强调速度时才在类实现的内部使用数组和指针。   一、 数组 1、数组的缺点:长度固定,无法获取其容量大小。...
  • 这道题不需要用迭代器,直接用直接用vector下标运算符直接获取索引位置上的元素即可。 思路:设立一个递增起点s,i为当前索引位置,在一个for循环中,进行判断是否为递增。如果不是,则将起点s设置为当前索引位置。...
  • 5.1.1 同步容器类的问题,在多线程的情况下,如,a 线程 对vector 执行 get 操作, 另外一个线程对vector 进行delete 操作,由于线程交替执行,可能有一个线程获取下标 为9 但是另外一个线程已经删除了下标为9的数据...
  • stl

    2018-03-07 13:08:27
    在使用stl时,从容器中获取元素时,一定要考虑1、容器可能为空,没有任何元素2、容器不为空,但是没有你想要的元素3、在for循环中,删除节点时,注意迭代器会失效4、使用vector最好不要用下标,最容易出错,深刻体会...
  • c++细节总结

    2011-10-19 15:01:17
    2.由end返回的迭代器并不指向vector中任何的实际的元素,相反,它只是一个哨兵的作用。表示已经处理完vector中的所有元素。 3.与vector相比,数组的显著的缺陷在于:数组的长度是固定的,而且程序员无法知道一个给...
  • C++学习第三天

    2020-06-02 23:01:41
    2.都可以使用迭代器。 3.可以使用下标访问。 4.std::array有传统数组支持随机访问、效率高、存储大小固定等特点。 不同点: 1.数组不支持获取大小,但是其他两种类型支持。 2.只有vector支持动态调整内存空间,其他...
  • C++中的STL用法

    2020-10-09 09:46:10
    字符串: 头文件 #include<string> 定义 string str; 获取长度 str.length(); 重载操作符[],返回下标所在字符。 字符串连接 str = str1+str2;...顺序容器:vector/deque/list ... vector>...迭代器
  • C++ primer 中文第三版

    2008-11-09 01:37:38
    9.2 迭代器迭代器范围 9.2.1 迭代器范围 9.2.2 使迭代器失效的容器操作 9.3 顺序容器的操作 9.3.1 容器定义的类型别名 9.3.2 begin和end成员 9.3.3 在顺序容器中添加元素 9.3.4 关系操作符 9.3.5 容器大小的操作 ...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

vector下标获取迭代器