gpt4 book ai didi

c++ - 使用 C++11 在一行中连接两个 std::vector

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:37 24 4
gpt4 key购买 nike

有没有一种方法,使用 C++11,在一个代码行中连接两个 std::vector,第一个在局部变量中定义,第二个从函数返回:

#include <vector>
#include <iostream>
#include <iterator>

std::vector<int> getNewVector()
{
return {4,5,6};
}

int main(int argc, char** argv)
{
std::vector<int> dest;
std::vector<int> src{1,2,3};

dest = src + getNewVector(); //Error: no operator "+" matches these operands

return 0;
}

编辑:不同于this question ,那不是使用 C++11,我想知道新的 C++11 标准是否提供了一些有用的功能来帮助我完成任务。例如,我使用了 + 运算符,即使它不起作用,但只是为了让您了解我在寻找什么。

最佳答案

您可以使用 boost::range 轻松做到这一点图书馆。

范围将成为 C++ 标准库的一部分。参见 Ranges for the Standard Library了解更多详情。

奖励点:只为生成的 vector 分配一次内存。

#include <vector>
#include <boost/range/join.hpp>

int main() {
std::vector<int> a{1,2,3};
std::vector<int> b{4,5,6};
auto c = boost::copy_range<std::vector<int>>(boost::join(a, b));
}

或者,将其推广到两个以上的输入序列和类型:

template<class T, class U>
auto join(T const& a, U const& b) -> decltype(boost::join(a, b)) {
return boost::join(a, b);
}

template<class T, class U, class... Args>
auto join(T const& a, U const& b, Args const&... args) -> decltype(boost::join(a, join(b, args...))) {
return boost::join(a, join(b, args...));
}

int main() {
std::vector<int> a{1,2,3};
std::list<int> b{4,5,6};
std::set<int> c{7,8,9};
auto d = boost::copy_range<std::vector<int>>(join(a, b, c));
}

同样,它只在 boost::copy_range<std::vector<int>> 中分配了一次内存因为输入序列的长度是已知的。

关于c++ - 使用 C++11 在一行中连接两个 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887080/

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