我做了这样一对
typedef std::pair<int, Dish> OrderPair;
Run Code Online (Sandbox Code Playgroud)
当Dish是一个对象.我有一个OrderPair的矢量:
std::vector<OrderPair> orderList;
Run Code Online (Sandbox Code Playgroud)
假设我想从向量中删除一对,当我不想从内存中删除菜时,擦除功能是否足够?我认为答案是肯定的,因为创建一对不是坐在堆中,因此我不需要释放任何内存.请告诉我,如果我错了.
我遇到了一个奇怪的问题。我得到了这个 FSM(代码的内容不是那么无能,所以我删除了它,现在你只能看结构):
start_link() ->
gen_statem:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
io:format ("init", []),
Data={1},
{ok, packetsDeliver, Data}.
callback_mode() ->
[state_functions, state_enter].
packetsDeliver(enter, _OldState, Data) ->
io:format ("Key1", []),
{keep_state, Data};
packetsDeliver(info, _OldState, Data) ->
io:format ("Key2", []),
{keep_state, Data};
packetsDeliver(cast, _PacketData, Data) ->
io:format ("Key3", []),
{next_state, allPacketsDelivered, Data}.
allPacketsDelivered(enter, _OldState, Data) ->
io:format ("Key4", []),
{next_state, packetsDeliver , Data}.
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事没有任何成功,我认为写作
{next_state, packetsDeliver , Data}.
Run Code Online (Sandbox Code Playgroud)
将为我提供状态:
packetsDeliver(enter, _OldState, Data)
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
exception exit: {bad_return_from_state_function,
{next_state,packetsDeliver,{1}}}
in function gen_statem:loop_event_result/9 …Run Code Online (Sandbox Code Playgroud) 我试图在迭代时从OrderPair的向量中擦除特定元素,但它不能像我期望的那样工作.我试图删除每一个OrderPair与id(第一),等于customer_Id.我做以下事情:
for(std::vector<OrderPair>::iterator i = source_Orders.begin(); i != source_Orders.end();)
{
if((*i).first == customer_Id)
{
dest_Orders.push_back(*i);
i = source_Orders.erase(i);
}
else
{
i++;
}
}
// definition of OrderPair
typedef std::pair<int, Dish> OrderPair;
// definition of OrderPair
enum DishType{
VEG, SPC, BVG, ALC
};
// definition of OrderPair
class Dish{
private:
const int id;
const std::string name;
const int price;
const DishType type;
};
Run Code Online (Sandbox Code Playgroud)
当迭代器指向一个符合if条件的元素时,(我可以看到调试它指向正确的元素),命令dest_Orders.push_back(*i);按预期工作,然后我试图擦除我移动到的元素dest_Orders,并且继续下一次迭代.但是,结果是删除了向量中的最后一个元素source_Orders.
我在这做错了什么?
提前致谢.