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更适合我啊。