1. vector 在函数中定义(vector<int > arr;), 对象是在栈上(&arr 是栈内存地址), 数据在堆上(& arr[0] 是队内存地址)。
2. vector 在函数中new 出(vector<int>* temp = new vector<int>(10,1);), 指针在栈上(&temp), 对象地址在堆上(temp ), 数据在堆上 (数据 (*temp ).at(i); or (*temp )[i]; 取址) 。
其中at(i)会做越界检查,耗时多。
总结: vector 的数据总是在堆上的,但对象的地址根据定义的方式不同可能在堆上,也可能在栈上。