0

我有一个用户估算的字符串,例如“5 6.3 foo 2.1”。字符串中的每个单词或数字,如 5 或 6.3,都可以有不同的类型。我想以最省时的方式(以线性时间)将这个用户输入的字符数组转换为元组。我不知道字符串中的单词或数字的数量,所以我事先不知道元组中应该有多少元素。我所知道的是元组的长度将小于预定义的限制,假设它是 10000 个元素。我相信 std::tuple_cat 函数可用于执行类似数组的连接,并且我可以使用它将每个元素一个一个地添加到元组中。我不喜欢这个主意,因为如果 std::tuple_cat 像数组连接一样工作,那么每次调用 tuple_cat(n 平方时间)时,都需要复制容器中的每个元素。我更愿意为元组保留或预分配一个内存空间,例如,100kb,并且添加到元组的新元素被放入这个预分配的内存空间,而不必复制任何其他元素. 有没有办法在线性时间内将我的用户输入的字符串变成一个元组?

4

1 回答 1

4

用 std::tuple 做你想做的事并没有真正有效的方法。它们是编译时构造,您希望在运行时确定元组中的类型。做到这一点的唯一方法是将类型的每个排列预先实例化到最大元素数,这将是一个相当大的数字......

听起来你真正想要的是类似std::vector<boost::variant<int, double, std::string...>>.

于 2013-11-01T21:13:36.473 回答