我有一个函数可以将向量向量展平为单个向量。来自 c# 我会这样写:
vector<T> flatten(vector<vector<T>> 2dVector)
{
vector<T> newVector(2dVector.size()*2dVector[0].size())
for (int i = 0; i < 2dVector.size(); i++)
{
for (int j = 0; j < 2dVector[i].size(); j++)
{
newVector[j + i * 2dVector.size()] = 2dVector[i][j];
}
}
return newVector;
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码在 msvc++ 中给出了 20 多个错误
在网上搜索了几个小时以了解如何制作此功能后,我将方法签名修改为
实用程序.h:
template <typename A, typename B> A flatten(const B 2dVector&);
Run Code Online (Sandbox Code Playgroud)
实用程序.cpp:
template <typename A, typename B> A flatten(const B 2dVector&)
{
A newVector(2dVector.size()*2dVector[0].size())
for (int i = 0; i < 2dVector.size(); i++)
{
for (int j = 0; j < 2dVector[i].size(); j++)
{
newVector[j + i * 2dVector.size()] = 2dVector[i][j];
}
}
return newVector;
}
Run Code Online (Sandbox Code Playgroud)
但是我仍然从这段代码中得到大约 15 个错误,而且我完全没有想法。有什么建议?
您的代码包含几个问题。仅举几例:
我建议以下替代方案:
#include <vector>
template<typename T>
std::vector<T> flatten(const std::vector<std::vector<T>> &orig)
{
std::vector<T> ret;
for(const auto &v: orig)
ret.insert(ret.end(), v.begin(), v.end());
return ret;
}
int main()
{
std::vector<std::vector<int>> vv;
vv.push_back(std::vector<int>{1, 2, 3});
vv.push_back(std::vector<int>{10, 20});
flatten(vv);
}
Run Code Online (Sandbox Code Playgroud)