Старый вектор очищается? Если да, то как и когда? - PullRequest
0 голосов
/ 15 апреля 2010

У меня есть следующий код:

void foo()
{
    vector<double> v(100,1);       // line 1
    // some code
    v = vector<double>(200,2);     // line 2
    // some code
}

что случилось с вектором размера 100 после второй строки? Это очищается само по себе? Если ответ «да», как и когда он очищен?

Кстати, есть ли другие "простые и понятные" способы изменения вектора, как в строке 2? Я не хочу такие вещи, как

v.resize(200);
for (int i=0; i<200; i++) v[i] = 2;

Еще один вопрос. Что, если вектор является членом класса:

class A{
public:
    vector<double> data;

    A(int size, double value)
    {
        data = vector<double>(size,value);
    }
};

A object(10,1);
// some code
object = A(20,2);     // ** What happened to the old object.data? **
// some code

1 Ответ

4 голосов
/ 15 апреля 2010

В назначении сначала создается временный векторный объект, который содержит 200 раз элемент 2. Затем этот временный объект присваивается v: вектор v удаляет все элементы, которые он содержит в данный момент, и копирует содержимое временного векторного объекта. В конце оператора временный векторный объект снова уничтожается.

Чтобы сделать это более кратко, не создавая временный объект, вы можете использовать метод assign():

v.assign(200, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...