我是C ++的新手,我正在学习用python编写代码。 我相信解决方案很简单,但我不知道该怎么做。
这是我在C ++中试图做的(不起作用):
int createBoard(int x, int y) {
int l[x];
int board[y, l[x]];
return board;
}
int main() {
int x = 5;
int y = 6;
board = createBoard(x,y);
return 0;
}
这是我想复制的内容(可以运行,但是在python中):
def createBoard(x,y):
length = [i for i in range(0,10)]
area = [y,length]
return area
area = createBoard(5,6)
基本上,我想创建一个函数,该函数返回一个带有y值的数组和一个一直计数到x的数组。
答案 0 :(得分:4)
据我从您的Python代码了解,您想创建一个2D数组。对于C ++的完整初学者而言,这可能是一项艰巨的任务。许多人建议使用std::vector
,它们是正确的,但是使用这种容器的2D“数组”可能非常慢。因此,当您获得更多有关C ++的经验时,此示例将起作用,但在以后的情况下不受欢迎:
#include <vector>
std::vector< std::vector<int> > createBoard(size_t x, size_t y)
{
return std::vector< std::vector<int> >(x, std::vector<int>(y));
}
因此,如果您想使用更有效的方式创建2D数组,请参见以下示例: LINK
答案 1 :(得分:3)
几乎可以保证逐行翻译代码会失败。您最好分两个步骤进行操作:1)完全了解语言A的代码功能。 1a)不用语言A编写代码。2)用语言B编写相同的代码。
我不是很精通python,所以我从这里开始:
基本上我想创建一个返回带有y数组的函数 值和一个计数到x的数组。
您声明了该函数以返回单个int
。单个int
不是两个数组。
接下来,这个
int l[x];
不是标准的c ++,因为x
不是编译时间常数。一些编译器将其作为扩展提供,但由于c ++具有std::vector
,因此没有理由使用它。
然后,这个
int board[y, l[x]];
有多种问题。 l[x]
正在访问数组l
中超出范围的元素。有效索引为0
至x-1
,因为l
具有x
元素。超出范围访问数组是未定义的行为。我们可以在这一点上停止,因为在发生不确定行为之前,任何事情都可能发生。但是,y, l[x]
调用逗号运算符。它评估双方,并得出正确的操作数。然后,您再次遇到相同的问题,l[x]
没有编译时间常数。
在这个地方,我有c ++代码,但事实证明我完全误解了您的代码应该做什么。我将留下答案,并把您推荐给其他人。
答案 2 :(得分:1)
您的代码有几个问题。主要的是Python数组area
包含两种不同类型的对象:第一个是整数y
,第二个是数组length
。 C ++数组的所有元素必须具有相同的类型。
根据您要使用的用途,可以将board
数组替换为std::pair
。这是一个包含两个不同类型元素的对象。
此外,在C ++中,必须动态创建具有非恒定长度的数组。使用new
运算符,或者(更好)使用std::unique_ptr
。 (或者您可能想改用std::vector
。)
这是一个小型C ++程序,其功能类似于您想要执行的操作:
#include <utility>
#include <memory>
auto createBoard(int x, int y) {
return std::make_pair(y, std::make_unique<int[]>(x));
}
int main() {
auto board = createBoard(5,6);
return 0;
}
(这仅在您的编译器支持C ++ 14或更高版本时才有效。)
但这实际上比“新手”水平要高得多,我怀疑您会发现它非常有用。
最好从规范程序的工作开始,而不是尝试从Python转换代码。
编辑
与std::vector
相同的代码,而不是动态数组:
#include <utility>
#include <vector>
auto createBoard(int x, int y) {
return std::make_pair(y, std::vector<int>(x));
}
int main() {
auto board = createBoard(5,6);
return 0;
}