#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> a = {1,2,3,7,1,5,4};
vector<int> b = {6,7,4,3,3,1,7};
a.erase(remove(a.begin(),a.end(),a[0]),a.end());
b.erase(remove(b.begin(),b.end(),b[0]),b.end());
return 1;
}
Run Code Online (Sandbox Code Playgroud)
对于这个具体的例子,我的GNU gdb Ubuntu 7.7.1声明返回1行:a = {2,3,7,1,5,4}这是不期望的(只删除一个1),并且b = {7 ,4,3,3,1}这是不期望的.
我的期望是b应该是a = 2,3,7,5,4和b = 7,4,3,3,1,7.
这里发生了什么事?
我有以下代码:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int > vi;
for(int i=0; i<10; i++) {
int j=i*i;
vi.push_back(j);
}
for(int i=0; i<(int)vi.size(); i++)
cout<<vi[i]<<" ";
cout<<endl;
return 1;
Run Code Online (Sandbox Code Playgroud)
}
执行此代码将返回"0 1 4 9 16 25 36 49 64 81",但这对我来说并不直观.
据我所知,当变量在堆栈上分配时,变量在超出范围时被解除分配.我也知道C++ STL向量存储指向变量的指针.为什么尽管整数在堆栈上被分配并超出范围,但向量仍保持有效整数?由于整数被解除分配,矢量保持的指针不应该被取消吗?