例如,假设我有以下代码:
vector<vector<int>> big;
for (int i=0;i<3;++i){
vector<int> small;
small.push_back(3*i+1);
small.push_back(3*i+2);
small.push_back(3*i+3);
big.push_back(small);
}
for (vector<int> s:big){
for (int a:s){cout<<a<<" ";}
cout<<endl;
}
Run Code Online (Sandbox Code Playgroud)
cout给出的结果是big包含每个for循环中的vector的值,我很困惑因为我认为vector for small会在每个for循环中自动被破坏.为什么大牌仍然可以获得正确的价值?
谢谢!
执行时:
big.push_back(small);
Run Code Online (Sandbox Code Playgroud)
small添加的副本big.您可以通过执行以下操作来验证它们是两个不同的对象:
std::cout << (void*)&big.back() << std::endl; // big.back() returns a reference to the copy.
std::cout << (void*)&small << std::endl;
Run Code Online (Sandbox Code Playgroud)
您还可以验证它们是否独立保存向量数据.您可以打印保存数据的指针.
std::cout << (void*)big.back().data() << std::endl;
std::cout << (void*)small.data() << std::endl;
Run Code Online (Sandbox Code Playgroud)