Назначение вектора локальной переменной для map<int , std::vector<int>> m1
в foo (), в надежде, что значение s1 не будет доступно после выхода из области видимости.Но это не тот случай.Похоже, что элементы вектора хранятся в куче, а локальная переменная s1 хранится в стеке.когда s1 был сохранен в карте, похоже, что он выделил новую память кучи и скопировал в нее значения.Правильно ли мое понимание?Я печатаю адрес каждого элемента вектора в foo, а также адрес каждого элемента вектора на карте.
#include <iostream>
#include <map>
#include <set>
#include<vector>
using namespace std;
std::map<int , std::vector<int>> m1;
void foo(){
vector<int> s1 = { 10, 20, 30, 40 };
cout << "local var address: " << &s1 << "\n";
cout << "Element address " << &s1[0] << " " << &s1[1] << " "
<< &s1[3] << " " << &s1[4] << "\n";
m1[1] = s1;
}
int main() {
foo();
cout << "\nElement value and address in map:\n";
for (auto it = m1[1].begin(); it != m1[1].end();it++) {
cout << *it << " " << &m1[1][*it] << "\n";
}
return 0;
}
output:
local var address: 0x7fff41714400
Element address 0xc07c20 0xc07c24 0xc07c2c 0xc07c30
Element value and address in map:
10 0xc08cc8
20 0xc08cf0
30 0xc08d18
40 0xc08d40