push_back () изменяет размер другого вектора в функции - PullRequest
0 голосов
/ 26 января 2019

Я делаю класс, который имеет функцию, которая объединяет два вектора unique_ptrs. Когда я использую функцию push_back, размер вектора параметров изменяется, и я не знаю почему.

class A: public vector<unique_ptr<int>>{        
    public:
        A& concatenate(A& c);   
};

A& A::concatenate(A& c) {
    for(int i = 0; i < c.size(); i++) { //this loop never stops
        push_back(make_unique<int>()); //this line changes the size of c?
        (*this)[(*this).size() - 1] = move(c[i]);
    }
    return *this;
}

Цикл for не прекращается, потому что каждый раз, когда используется метод push_back, размер c также увеличивается на 1.

Я также подумал использовать resize () перед циклом for, а затем переместить все указатели, но я хочу знать, почему метод push_back меняет другой вектор.

1 Ответ

0 голосов
/ 25 февраля 2019

Это может произойти, когда эти объекты A и c A совпадают, т. Е. Вы пытаетесь вызвать concatenate для объекта и передать тот же объект, что и param, для объединения.Таким образом, push_back не изменяет размер другого вектора.Это тот же вектор, над которым вы работаете.

В sidenote есть несколько проблем с вашим кодом и постом

  1. Как сказал @PaulMcKenzie, вы должны опубликовать MCVE
  2. В общем случае извлекать из контейнеров STL не очень хорошая идея.
  3. Если вы не пытаетесь научиться реализовывать, сначала вам следует попытаться найти и использовать методы, предоставляемые контейнерами STL.например, вставьте как предложено @Some программист чувак.
...