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



我有一个2D容器,它的第一个维度是deque,第二个维度是向量。

如何将其转换为第一个和第二维度是相同的向量

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++不能直接将deque转换为vector。在您的示例的第三行中,有一个隐藏的循环,与此类似(但它使用迭代器等(

for(size_t i = 0; i < v1.size(); i++)
v3[i] = v1[i]; // here we try to cast deque to vector

所以有三种方法,如何实现你的目标:

  1. 使用算法库中的一些函数,如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. 直接告诉编译器如何将一个类转换为另一个类,但我不知道标准类是否有这种可能性(但对于自己实现的类,这种可能性是可用的(

相关内容

最新更新