2013-12-14 3 views
1

Моя попытка:Как назначить вектор объекту по ссылке?

class myClass { 
    std::vector<int> myVector; 
public: 
    myClass(std::vector<int> &v) { 
    this->myVector = v; 
    } 
    void doSomething() { 
    for (int &num : this->myVector) { 
     num += 100; 
    } 
    } 
}; 

в основной():

vector<int> myVect = {1,2,3,4}; 
myClass myClassInst(myVect); 
myClassInst.doSomething(); 

но проверка:

for (int i : myVect) { 
    printf("%i\n", i); 
} 

не делает никаких изменений исходного вектора.

+0

Извините, мой плох, вектор должен быть изменен через объект, конечно. Последний цикл предназначен для проверки. – rsk82

+1

Вы передаете вектор по ссылке на конструктор, но конструктор копирует содержимое переданного вектора в элемент данных 'myVector'. То есть 'myClassInst.myVector' и' myVect' не связаны. – dyp

ответ

4

Если вы хотите сохранить ссылку на другой объект в своем классе, вам нужно использовать то, что на самом деле относится к исходному объекту. Ссылки выглядят как очевидный выбор, но они являются плохими членами данных! Вместо этого вы хотите использовать указатель:

class myClass { 
    std::vector<int>* myVector; 
public: 
    myClass(std::vector<int>& vector): myVector(&myVector) {} 
    void doSomething() { 
     for (auto& num: *myVector) { 
      num += 100; 
     } 
    } 
}; 
Смежные вопросы