写入 std::vector 中的现有 Sales_data 对象会导致程序崩溃 (C++)答案
Writing to existing Sales_data object in std::vector causes program to crash (C++)写入 std::vector 中的现有 Sales_data 对象会导致程序崩溃 (C++)
我正在阅读 Stanley Lippman 的 C++ Primer Ed.5 中的练习。
我的代码存在以下问题:当我更新 std::vector<Sales_data> vec;
中的现有 Sales_data
对象时,程序崩溃。
为了克服这个问题,我删除了现有的 Sales_data
对象并用新的更新对象替换它。
有没有更有效的方法来做到这一点,而无需删除 Sales_data
对象然后替换它?
我的代码:
#include <iostream>
#include <vector>
struct Sales_data
{
std::string isbn() const{ return this->bookNo; }
Sales_data& combine(const Sales_data &rhs)
{
this->units_sold += rhs.units_sold;
this->revenue += rhs.revenue*rhs.units_sold;
return *this;
}
Sales_data add(const Sales_data &lhs, const Sales_data &rhs)
{
Sales_data sum =lhs;
sum.combine(rhs);
return sum;
}
std::string bookNo;
unsigned units_sold =0;
double revenue =0.0;
};
int main()
{
Sales_data book;
std::vector<Sales_data> vec;
while(std::cin>>book.bookNo>>book.units_sold>>book.revenue)
{
for(auto it =vec.begin(); !vec.empty()&&it!=vec.end(); ++it)
{
if(book.bookNo == it->isbn()) //Check to see if book exists if vec
{
Sales_data add_book =it->add(*it, book);
vec.erase(it); //must erase to prevent a crash
vec.push_back(add_book);
}
}
//Some code for new Sales_data entry
}
return 0;
}