【发布时间】:2020-09-01 09:45:29
【问题描述】:
我有一个函数get_stuff(),它返回一个vector。
我想做以下事情:
vector<int> get_stuff(); // a function returning a vector of ints
list<int> stuff = get_stuff();
stuff 必须是一个列表,因为会有很多插入/删除操作。
但是您显然不能将vector 分配给list,也不能将其用作构造函数参数。
另外,我宁愿不只是将get_stuff 的返回类型更改为list,因为在代码的其他部分我需要随机访问get_stuff 返回的内容,因此我需要vector。
显而易见的方法是:
vector<int> get_stuff(); // a function returning a vector of ints
vector<int> stuff_temp = get_stuff();
list<int> stuff(stuff_temp.begin(), stuff_temp.end());
但除非绝对必要,否则我宁愿不要用不必要的变量污染代码。
有没有更好的方法将get_stuff 的返回值放入列表stuff,最好是一行?
【问题讨论】:
-
不能
get_stuff只返回一个list吗?关于不必要的变量:您可以将整个内容包装在辅助函数std::list<int> get_stuff_as_list()或其他东西中。 -
我更好奇你需要一个列表开始的原因。你想解决的原始问题是什么?为什么需要一个列表来解决这个问题?
-
@Someprogrammerdude 正如我在问题中所说。会有很多删减。为了保持代码干净,删除将与填充容器的代码分开(无论该容器是什么)。此外,为了保持代码干净,可能导致元素被过滤掉的多个条件将被分开。因此,这将导致相当多的随机访问删除。
-
如果您有一个庞大的列表,那么在
std::list中插入/删除比std::vector更有效,对吧?因为您需要从插入/删除位置推/拉到结束? -
虽然
std::vector通常应该是“转到”容器类型,但也许从这里开始不是最好的选择?也许您应该从一个列表开始,并避免容器类型之间的所有复制?或者也许考虑“介于两者之间”(某种)std::deque?
标签: c++ visual-c++ stl