读书人

vector中end()和begin()本身值的疑问,

发布时间: 2012-04-26 14:01:31 作者: rapoo

vector中end()和begin()本身值的疑问

C/C++ code
#include <vector>using namespace std;using std::vector;#include <stdio.h>void main(){    vector<int> iv1;vector<int>::iterator itve1;for(int i=0;iv1.size()!=1000;i++){    iv1.push_back(i);//在vector中存入1000个元素}printf("======%d\n",iv1.begin());printf("======%d\n",iv1.end());}


为什么begin()位置的值和end()位置的值是一样的?
vector不是顺序存储的吗?按道理,end()要比begin()大的,以递增的关系……

[解决办法]
你不要输出, 你单步跟踪试试,看一样不
[解决办法]
编译通不过

warning: cannot pass objects of non-POD type 'class __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >' through '...'; call will abort at runtime

[解决办法]
探讨

void main()
{

vector<int> iv1;

//vector<int>::iterator itve1;

for(int i=0;iv1.size()!=1000;i++)
{
iv1.push_back(i);//在vector中存入1000个元素
}

printf("======%d\n",iv1.begin());
pri……

[解决办法]
楼主的眼睛花了吧。
C/C++ code
#include <vector>#include <iostream>#include <stdio.h>using namespace std;int main(){    vector<int> iv1;for(int i=0;iv1.size()!=1000;i++){    iv1.push_back(i);//在vector中存入1000个元素}printf("======%d\n",iv1.begin());printf("======%d\n",iv1.end());return 0;}
[解决办法]
探讨

引用:
楼主可以这样试一下 用C++的方法输出 cout << iv1.begin() << endl; cout << iv1.end() << endl; 这样使出的值就正确了 在我的机子上是 003833D8 00384378 每个人的机子上应该不一样。

你用的什么编译器能通过这种写法?
我用的vs2008 这样写报错

[解决办法]
对于list,LZ可以尝试着随机删除/插入一些节点,也许可以看到期望的结果。
不管怎样,看debugger中的memory dump会理解的更深入。

[解决办法]
楼主啊,你要是想研究,不要沉迷于表象,直接跳进去看源码
[解决办法]
探讨

引用:
我说说我的见解。
首先我认为在这里%d和%p输出的值是一样的,只不过%d是以int方式显示,%p是以指针方式显示。在我的机器上——

%d的输出——
======1244996
======1244996

%p的输出——
======0012FF44
======0012FF44

用科学型计算器看了一下,这两组值都是相等的。

至于为什……

[解决办法]
探讨
不是虚函数表指针,vs2008的vector迭代器的第一个成员变量是一个指向vector的指针.
因为它们是同一个vector 的迭代器,所以一样.

[解决办法]
C/C++ code
#include <iostream>#include <vector>#include <stdio.h>using namespace std;int main(){        vector<int> v;        for(int i=1; i<10;i++)                v.push_back(i);        vector<int>::iterator it;        it = v.begin();        printf("begin:%d\n",*it);        for(it = v.begin(); it!= v.end();it++)                printf("next:%d-",*it);        printf("\n");        printf("%d - %d \n",*v.begin(),*v.end());        printf("u2:%x - %x\n",&(*v.begin()),&(*v.end()));        return 0;} 

读书人网 >C++

热点推荐