gpt4 book ai didi

c++ - 扁平化二维 vector 的通用方法

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:45 25 4
gpt4 key购买 nike

我有一个函数可以将一个 vector 的 vector 展平为一个 vector 。来自 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;
}

但是这段代码在 msvc++ 中给出了 20 多个错误

在网上搜索如何实现此功能的几个小时后,我将方法签名修改为

实用程序.h:

template <typename A, typename B> A flatten(const B 2dVector&);

实用程序.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;
}

但我仍然从这段代码中得到大约 15 个错误,而且我完全没有想法。有什么建议吗?

最佳答案

您的代码包含几个问题。举几个例子:

  1. 标识符不能以数字开头。
  2. 您的模板应由单个参数进行参数化 - 返回 vector 的基本值类型
  3. 您的代码在内部假定 vector 的大小相同,因此很容易容纳参差不齐的数组
  4. 有更有效的方法可以将 vector 附加到 vector 的末尾。

我建议以下替代方案:

#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);
}

关于c++ - 扁平化二维 vector 的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38874605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com