C ++ копирует вектор объектов в другой - PullRequest
0 голосов
/ 23 октября 2019

Я хочу скопировать в векторы одинакового размера и одного и того же типа друг на друга, но после печати значения кажется, что оно работает неправильно или не хочет копировать все указатели на данные в каждом объекте. Спасибо за помощь

Вот код:

std::vector<Vehicle> vehicles(2);
std::vector<Vehicle> vehiclesCopy(2);

vehicles[0].setX_pos(3);

for(int i=0;i<vehicles.size();i++)
    vehiclesCopy.push_back(vehicles[i]);

cout<<vehicles[0].getX_pos()<<endl;
cout<<vehiclesCopy[0].getX_pos()<<endl;

Вывод:

3

0

Вот код транспортного средства

class Vehicle
{
private:
    unsigned int x_pos,y_pos,velocity;
    char type;
public:
    void vehicle(char           inType,
                unsigned int    inX_pos,
                unsigned int    inY_pos,
                unsigned int    inVelocity)
                {
                    type=inType;
                    x_pos=inX_pos;
                    y_pos=inY_pos;
                    velocity=inVelocity;
        }
    unsigned int getMaxPassengers(){
        return maxPassengers;
    }
    unsigned int getX_pos(){
            return x_pos;
        }
    unsigned int getY_pos(){
            return y_pos;
        }
    unsigned int getVelocity(){
            return velocity;
        }
    char getType(){
            return type;
        }
    void setX_pos(unsigned int input){
            x_pos=input;
        }
    void setY_pos(unsigned int input){
            y_pos=input;
        }
    void setVelocity(unsigned int input){
            velocity=input;
        }
    void setType(char input){
        type=input;
    }
};

1 Ответ

5 голосов
/ 23 октября 2019

Вы создаете два вектора размером 2. Затем вы перемещаете все элементы из одного вектора в другой. Теперь у вас есть один неизмененный вектор и другой вектор с 4 элементами. Нажатие двух элементов в конце не окажет никакого влияния на первый элемент (тот, который вы печатаете).

Для копирования векторов используйте простое назначение:

vehiclesCopy = vehicles;

Или, если вы хотите использоватьцикл (почему бы вам?), предполагая, что они оба имеют правильный размер (они делают в вашем примере):

for(int i=0;i<vehicles.size();i++) {
    vehiclesCopy[i] = vehicles[i];
}

PS: этот ответ не полная правда. Если vehiclesCopy на самом деле является просто копией vehicles, вам не следует сначала создавать пустой вектор, а затем копировать его, а вместо этого использовать правильный конструктор. Подробнее см. здесь (перегрузка (6) - ваш друг здесь).

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