gpt4 book ai didi

c++ - 将 vector 拆分为值

转载 作者:行者123 更新时间:2023-11-30 01:10:17 24 4
gpt4 key购买 nike

假设我有一个来自标记化函数 tokenize() 的值 vector 。我知道它只有两个值。我想将第一个值存储在 a 中,将第二个值存储在 b 中。在 Python 中,我会这样做:

a, b = string.split(' ')

我可以用丑陋的方式这样做:

vector<string> tokens = tokenize(string);
string a = tokens[0];
string b = tokens[1];

但这需要额外的两行代码,一个额外的变量,并且可读性较差。

我如何在 C++ 中以干净高效的方式做这样的事情?

编辑:我必须强调效率非常重要。太多的答案不能满足这一点。这包括修改 my tokenization function .

编辑 2:出于我无法控制的原因,我正在使用 C++11,而且我也无法使用 Boost。

最佳答案

使用结构化绑定(bind)(肯定会在 C++17 中),您可以编写如下内容:

auto [a,b] = as_tuple<2>(tokenize(str));

哪里as_tuple<N>是一些转换 vector<string> 的待声明函数到 tuple<string, string, ... N times ...> ,如果大小不匹配,可能会抛出。你不能解构 std::vector因为它的大小在编译时是未知的。这必然会对 string 进行额外的移动所以你为了获得一些代码清晰度而失去了一些效率。也许没关系。

或者你可以写一个 tokenize<N>返回 tuple<string, string, ... N times ...>直接,避免额外的举动。在那种情况下:

auto [a, b] = tokenize<2>(str);

很棒。


在C++17之前,你所拥有的就是你能做的。但是只要让你的变量引用:

std::vector<std::string> tokens = tokenize(str);
std::string& a = tokens[0];
std::string& b = tokens[1];

是的,这是几行额外的代码。那不是世界末日。这很容易理解。

关于c++ - 将 vector 拆分为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com