如何通过不同的类将一个向量复制到另一个向量

时间:2015-06-13 23:56:16

标签: c++ vector

我正在尝试创建一个程序,我想将一个已定义的向量复制到另一个,但是在不同的继承类中。它是这样的:

//map.cpp
void Map::setQuantity() {
std::cout << "set quantity: ";
std::cin >> quantity;
}


void Map::setArray(){
    for(int i=0;i<quantity;++i) {
        cityMap.push_back(City());
        }
    }

void Map::showMap(){
    for(int i=0;i<quantity;++i){
        cityMap[i].showCoords();
        }
    }

double Map::getLength(int a, int b) {
    return sqrt(pow(cityMap[a-1].getCoordX()-cityMap[b-1].getCoordX(),2)+pow(cityMap[a-1].getCoordY()-cityMap[b-1].getCoordY(),2));
    }

int Map::getQuantity() {
    return quantity;
    }

Map::Map() {
}

Map::~Map() {
}

//city.cpp
int City::randomize(int range) {

return rand()%range + 1;
}

void City::setCoords(){
    coord_x = randomize(1000);
    coord_y = randomize(1000);
}

void City::showCoords(){
    std::cout << "x = " << coord_x << " y = " << coord_y << std::endl;
    }

int City::getCoordX(){
    return coord_x;
}

int City::getCoordY() {
    return coord_y;
}

City::City(){
    setCoords();
}

//populations.h
class Populations: public Map {
    protected:
    std::vector<City> startPop;
    std::vector<City> newPop;
    public:
    void showPop();
    void setStartPopulation();
    Populations();
    };

此时,population.cpp是空的。 当我尝试使用startPop = cityMap, copy()复制它或声明startPop(cityMap)时,即使有时它会编译,在运行构造函数后,我尝试复制向量,我有分段错误(核心转储)错误。就像Populations类没有访问cityMap矢量一样,即使我已经公开了它。我真的没有想法如何使它工作,所以,请帮助我。哦,cityMap是正确分配的

1 个答案:

答案 0 :(得分:1)

将一个矢量复制到另一个矢量有多种选择。

您可以使用std::copy算法,但需要包含algorithm头文件:

#include<algorithm>
std::copy(cityMap.begin(),cityMap.end(),std::back_inserter(startPop));

或者您可以使用复制构造函数构造startPop,如下所示:

startPop(cityMap);