none
怎么使用C++ vector里begin方法 RRS feed

  • 问题

  • #include "stdafx.h"
    #include<iostream>
    #include<fstream>
    #include<vector>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
     int* m;
     vector<int> numlist;
    
        for(int n=1;n<10;n++)
         numlist.push_back(n);
    
    
    
         for(int j=0;j<7;j++)
         {
          m=(numlist.begin()+j);
          cout<<*m<<endl;
          
         }
    
    
    
     return 0;
    }
    请问为什么会出错呢?可是把它最后两句换成cout<<*(numlist.begin()+j)<<endl就能够正常输出呢?为什么会这样呢?谢谢~
    2009年11月20日 6:40

答案

  • Iterator和普通的指针是不一样的
    如果非要这样写,你可以写成
    m= &*numlist.begin() + j;

    麻烦把正确答案设为解答。
    • 已标记为答案 谐音 2009年11月20日 12:49
    2009年11月20日 9:02
    版主
  • 对于vector来说,标准库的使用的数据结构是数组,所以你可以直接使用地址。效率确实会高一些。但是对于其他的容器,其底层数据结构就不是数组了。这样你是无法使用指针进行遍历的。要想提高程序的效率首先要从设计下手,之后根据设计选择相应的容器和算法。


    麻烦把正确答案设为解答。
    • 已标记为答案 谐音 2009年11月20日 12:49
    2009年11月20日 11:33
    版主

全部回复

  • Iterator和普通的指针是不一样的
    如果非要这样写,你可以写成
    m= &*numlist.begin() + j;

    麻烦把正确答案设为解答。
    • 已标记为答案 谐音 2009年11月20日 12:49
    2009年11月20日 9:02
    版主
  • 版主您好,谢谢您的回答,我不是非要这样写,我是想让程序的效率更高一些,我认为直接操作内存比用vector.at(i)这样的访问会更快一些,不知道这种想法是否合理?

    2009年11月20日 10:53
  • 对于vector来说,标准库的使用的数据结构是数组,所以你可以直接使用地址。效率确实会高一些。但是对于其他的容器,其底层数据结构就不是数组了。这样你是无法使用指针进行遍历的。要想提高程序的效率首先要从设计下手,之后根据设计选择相应的容器和算法。


    麻烦把正确答案设为解答。
    • 已标记为答案 谐音 2009年11月20日 12:49
    2009年11月20日 11:33
    版主
  • 太感谢您了!

    2009年11月20日 12:49