[英]How to create a multi-dimensional container by another different type multi-dimensional container?
我有一个二维容器,其第一维是deque ,第二维是vector 。
如何将其转换为第一维和第二维是相同向量的新容器?
vector<deque<int>> v1;
vector<vector<int>> v2{v1}; //error
vector<vector<int>> v3(v1.begin(),v1.end()); // error
/* the different type deque<int> couldn't be used for vector<int> constructer. */
我知道我可以手动逐步复制底部元素。 有什么算法可以一次完成吗?
是的, std::transform
:
std::vector<std::vector<int>> v3;
v3.reserve(v1.size());
std::transform(v1.begin(), v1.end(), std::back_inserter(v3), [](const auto& d)
{
return std::vector<int>(d.begin(), d.end());
});
你应该明白,C++ 不能直接将双端队列转换为向量。 在你的例子的第三行,有一个隐藏循环,类似于这个(但它使用迭代器等等)
for(size_t i = 0; i < v1.size(); i++)
v3[i] = v1[i]; // here we try to cast deque to vector
所以有3种方法,如何实现你的目标:
std::transform
(acraig5075 答案中的示例)v3.reserve(v1.size());
for(size_t i = 0; i < v1.size(); i++)
v3.emplace_back(v1[i].begin(), v1[i].end());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.