【发布时间】:2017-10-15 21:16:34
【问题描述】:
算法简单直接:
继续将n 维向量分解为n-1 维构成向量,直到您可以访问基本数据类型对象。它们的添加简单且定义明确。
这是我使用模板和operator+的实现:
#include <iostream>
#include <vector>
template<class T>
std::vector<T> operator+ (const std::vector<T>& v1, const std::vector<T>& v2)
{
std::vector<T> output;
unsigned len = v1.size();
output.resize(len);
for (int i = 0; i < len; ++i)
output[i] = v1[i] + v2[i];
return output;
}
int main ()
{
using namespace std;
vector<std::vector<int>> x = {{8,9,0},{5,6,7}};
vector<std::vector<int>> y = {{1,1,1},{1,1,1}};
auto result = x + y; // Yeah, just like that !
// Being Lazy, instead of implementing multi-dimensional vector printing...
for (int i = 0; i < result.size(); ++i)
{
for (int j=0; j<result[i].size(); ++j)
cout << result.at(i).at(j) << " ";
cout << "\n";
}
return 0;
}
但是假设你不允许使用operator+。
您必须将界面设计为某些功能Add()。
但是我做不到!!这是我的尝试:
#include <iostream>
#include <vector>
// Hoping to handle vectors...
template<class T>
std::vector<T> Add (const std::vector<T>& v1, const std::vector<T>& v2)
{
std::vector<T> output;
unsigned len = v1.size();
output.resize(len);
for (int i = 0; i < len; ++i)
output[i] = Add(v1[i], v2[i]);
return output;
}
// Hoping to handle basic-datatypes...
template<class T>
T Add (const T& v1, const T& v2)
{
T output;
unsigned len = v1.size();
output.resize(len);
for (int i = 0; i < len; ++i)
output[i] = v1[i] + v2[i];
return output;
}
int main ()
{
using namespace std;
vector<std::vector<int>> x = {{8,9,0},{5,6,7}};
vector<std::vector<int>> y = {{1,1,1},{1,1,1}};
auto result = Add(x, y); // I wish ! But not happening !
// Being Lazy, instead of implementing multi-dimensional vector printing...
for (int i = 0; i < result.size(); ++i)
{
for (int j=0; j<result[i].size(); ++j)
cout << result.at(i).at(j) << " ";
cout << "\n";
}
return 0;
}
有可能吗?
【问题讨论】:
-
这就是为什么您使用单维数组/向量并使用数学假装它具有多个维度的原因。这样你就可以拥有一个 n 维向量,但只使用一个 for 循环。
标签: c++ multidimensional-array stdvector