我有这个留言板,出售,想要,下面的程序类型。我终于想出了如何阅读所有内容,但需要有关如何比较项目的建议。当我在文件中读到时,想要检查数组以查看是否需要一个项目(true)并计算数组中已有项目的名称并进行销售。如果找到匹配项,则不添加该项,并从数组中删除所需项,然后切换。
CREATE TABLE `parent_child_columns` (`id` int auto_increment,
`child_id` int,
`parent_id` int,
`level` int,
PRIMARY KEY (`id`))
INSERT INTO `parent_child_columns` (`child_id`, `parent_id`, `level`)
VALUES (1, 0, 1), (2, 0, 1),
(3, 1, 2), (4, 1, 2),
(5, 3, 3), (5, 1, 3), (6, 3, 3), (6, 1, 3)
SELECT pc.child_id, pc.level
FROM parent_child_columns pc
ORDER BY pc.parent_id
}
}
答案 0 :(得分:1)
我不会为你编写代码,但我会告诉你我是如何解决这个问题的。
首先,我将arr
重新定义为
std::list<MessageBoard> arr;
要将元素添加到列表,请使用list::push_back
。
如果需要的项目(true)并计算数组中已有项目的名称
编写bool
函数,如果满足这些条件则返回true,否则返回false。
使用您的功能使用std::find
或std::find_if
扫描列表。如果搜索成功,则该函数返回指向所需项目的迭代器。
删除想要的项目
在迭代器上使用list::erase
。如果你搞砸了,删除无效迭代器的结果是未定义的,但很可能你的运行时库会让你知道。
并转移
没有必要。列表长度自行处理。
您可能还会考虑std::set
进行有效搜索,或std::map<MessageBoard, int>
保留相同元素的计数。
通过使用标准库容器,您可以提升逻辑从按位置处理数组元素,并使其更接近匹配消息的问题。你也会写更少的循环。
如果我建议,我会给arr
或board
打电话messages
。使用该名称来传达编译器不知道的含义。此外,atoi在这里有点不合适。由于您已经在stringstream
领域,因此您也可以通过这种方式提取价格。
stringstream sw(word);
sw >> arr[index].price;
HTH。