class CSensor
{
public:
CSensor(int nVal1,char* pVal2,unsigned int nVal3);
CSensor(const CSensor& refMessage);
const CSensor& operator=(const CSensor& refMessage);
~CSensor(void);
private:
int m_nVal1;
char* m_pVal2;
unsigned int m_nVal3;
};
// vector erase
std::vector<CSensor> SensorList;
CSensor obj1(1,"Test1",10);
SensorList.push_back(obj1);
CSensor obj2(2,"Test2",11);
SensorList.push_back(obj2);
CSensor obj3(3,"Test3",12);
SensorList.push_back(obj3);
SensorList.erase (SensorList.begin()+1);
// map erase
std::map<int ,CSensor> ListSensor;
CSensor obj11(1,"Test1",10);
CSensor obj12(2,"Test2",11);
CSensor obj13(3,"Test3",12);
ListSensor.insert(std::pair<int,CSensor>(1,obj11));
ListSensor.insert(std::pair<int,CSensor>(2,obj12));
ListSensor.insert(std::pair<int,CSensor>(3,obj13));
ListSensor.erase(2);
Я отлаживал оба случая.
В обоих случаях я удаляю второй элемент. В случае вектора
он копирует 3 элемента во 2-е ядро и затем удаляет 3-е место.
Так что, когда ты говоришь
List.erase (List.begin()+1);
это вызов оператора присваивания (CSensor =), а затем вызов деструктора.
В случае карты, когда я делаю
ListSensor.erase(2);
он вызывает только деструктор.
Я прошел Вектор STL против стирания карты .
Он говорит Итератор, не может объяснить поведение.
У меня вопрос, почему стирание ведет себя по-разному для этих двух контейнеров STL ??