new_look_on_vector

没看过什么深入理解STL什么的,暂时也没想看类似的东西。不过因为偶尔会有误用到vector.end()的时候,而且很烦躁,所以突然有了个想法。弄了下面的,试了下效果。

void main()
{
	int i;
	vector<int*> vec;
	int j = 1;
	vec.push_back(&j);
	vec.push_back(&j);
	vec.push_back(&j);

	cout<<"&vec.begin:\t"<<&(vec.begin())<<endl;
	cout<<"vec.begin_val_val:\t"<<*(vec.begin())<<endl;
	cout<<"&vec[0]:\t"<<&(vec[0])<<endl;
	cout<<"&vec[1]:\t"<<&(vec[1])<<endl;
	cout<<"&vec[2]:\t"<<&(vec[2])<<endl;
	//cout<<sizeof(vec.begin())<<endl;
	cout<<"&vec.end:\t"<<&(vec.end())<<endl;
	cin>>i;
}

 效果如下。

单从分析能够知道的是,vec.begin()和vec.end()是一起的,至少“很近”。而从参数的地址看,参数的内存则很像动态分配的内存。大概意思可能是begin和end关联的东西(不知道怎么形容,是叫内存还是叫啥)则作为相对固定的参数在对象初始化的时候就固定下来。当然纯属猜测。

------------------------------------------------------

后来还发现个奇怪的东西。

//cout<<"vec.begin_val_val:\t"<<*(vec.begin())<<endl;

 注释掉后,结果有变。(我指begin的地址)

为啥,暂时一点想法没有,暂时也不想去研究。

怎么说end()的地址没变。凑合看了下值

是0,不过不能用来赋值或者判断。情理上“被束缚”了。果然还是C更适合我啊。

posted on 2012-02-03 16:33  shizuka  阅读(212)  评论(0编辑  收藏  举报

导航