【发布时间】:2012-12-29 23:17:26
【问题描述】:
对于 C++ 列表中每次运行 x 或多个连续零,我想删除运行中除 x 之外的所有零。如果x = 0,则删除所有零。
我在想一个 C++ 函数,它接受一个列表 list<int> L 和一个数字 int x 作为输入。
例如,让L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8}。
- 如果
x = 0,则返回L = {7, 12, 2, 27, 10, 8} - 如果
x = 1,则返回L = {7, 0, 12, 0, 2, 0, 27, 10, 0, 8} - 如果
x = 2,则返回L = {7, 0, 12, 0, 0, 2, 0, 0, 27, 10, 0, 0, 8} - 如果
x = 3,则返回L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 8} - 如果
x = 4,则返回L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8}(与原L相同) - 如果是
x >= 5,则返回原始L,因为不存在5 个或更多连续零的运行。
几个月前,我使用 Python (stackoverflow.com/questions/11732554/...) 提出了上述相同的问题,并得到了很好的答案。现在我想用 C++ 完成这个任务。
任何帮助将不胜感激。
【问题讨论】:
-
使用与 Python 相同的算法。
-
C++ 是否有与
yield等效的功能? -
你可以直接 push_back 到你的结果列表而不是 yield。
标签: c++ algorithm list c++11 erase-remove-idiom