【发布时间】:2023-03-13 01:32:01
【问题描述】:
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
class Car {
public:
Car( float costs, float speed) : costs(costs), speed(speed){};
float getSpeed() const {
return speed;
}
float getCosts() const {
return costs;
}
private:
float costs;
float speed;
};
class CarManager {
public:
CarManager(){};
void assignCars( std::vector<Car> &cars){
float costs = 1000.0;
float inc_costs = 700.0;
float inc_speed = 50.0;
for (size_t i = 0; i <= 10; ++i) {
float speed = 10.0;
std::vector<Car*> car_vec;
for (size_t j = 0; j < 5; ++j) {
if (j >= i) {
cars.push_back(Car(costs, speed));
car_vec.push_back(&cars.back());
}
speed += inc_speed;
}
car_storage.insert( {costs , car_vec } );
costs += inc_costs;
}
}
void print(){
for (const auto & p : car_storage) {
std::cout << "map[" << p.first << "] = ";
for (const auto & s : p.second) {
std::cout << "[" << s->getSpeed() <<", " << s->getCosts() << "] , ";
}
std::cout << std::endl;
}
}
private:
std::map<float, std::vector<Car*> > car_storage;
};
int main()
{
std::vector<Car> cars;
CarManager car_manager;
car_manager.assignCars(cars);
car_manager.print();
}
printout 与我的预期有些不同。我将具有成本和速度的汽车推入向量 [cars.push_back(Car(costs, speed))] 中,然后将指向此 Car 的指针推入 Car* 的本地向量中:car_vec.push_back(&cars.back())。接下来,我将键 (costs) 和值 (car_vec) 插入到映射中。当我打印出地图时,这些值不再正确。
以第一种情况为例:
第一个循环 i = 0,内循环 j,因此 (j >= i) 和我 push_back 一个 Car( 1000.0, 10.0)。稍后,地图中包含的内容只是Car(0,0)。对于其他汽车,这也适用,但它们有一些奇怪的值。
map[1000] = [0, 0] , [0, 7.41086e-38] , [0, 7.41063e-38] , [0, 7.41064e-38] , [210, 1700] ,
map[1700] = [0, 7.41092e-38] , [0, 7.41094e-38] , [0, 7.41094e-38] , [210, 1700] ,
map[2400] = [110, 2400] , [160, 2400] , [210, 2400] ,
map[3100] = [160, 3100] , [210, 3100] ,
map[3800] = [210, 3800] ,
我不知道发生了什么。调试向我显示,在将它们插入到 car_storage.insert( {costs , car_vec } ) 的地图中之前,这些值是正常的。
【问题讨论】: