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