vector中end()和begin()本身值的疑问,该怎么解决
vector中end()和begin()本身值的疑问C/C++ code#include vectorusing namespace stdusing std::vector
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;}