繁体   English   中英

如何通过另一个不同类型的多维容器创建一个多维容器?

[英]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种方法,如何实现你的目标:

  1. 使用算法库中的一些 function,如std::transform (acraig5075 答案中的示例)
  2. 迭代自己
v3.reserve(v1.size());
for(size_t i = 0; i < v1.size(); i++)
    v3.emplace_back(v1[i].begin(), v1[i].end());
  1. 直接说编译器如何将一个 class 转换为另一个,但我不知道标准类是否有这种可能性(但对于自己实现的类是可用的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM