数组在 C++ 中包含来自 python 的范围

Posted

技术标签:

【中文标题】数组在 C++ 中包含来自 python 的范围【英文标题】:array include range from python in c++ 【发布时间】:2017-05-04 14:52:46 【问题描述】:

我在python中有一个数组,声明如下:

u[time][space]

我在 Python 的 for 循环中的代码要求我执行以下操作:

for n in range(0,10):
    u[n][:] = 1

这个冒号表示我的[空格]的整个范围。 现在,在 c++ 中执行 for 循环时,我将如何使用冒号 (:) 来指示整个范围?

谢谢

【问题讨论】:

在 C++ 中使用 2 个循环而不是 1 个(就像在 Python 中一样)。 您可以改用auto v = std::vector<std::vector<int>>(time, std::vector<int>(space, 1)); 之类的东西。 这个问题很模糊。你到底想做什么?如果您只是想为向量分配值 1,请查看 constructor 4 - 否则,操作向量需要两个循环,因为它在列表上没有切片语法 【参考方案1】:
for(auto& inner : u)
    std::fill(inner.begin(), inner.end(), 1);

【讨论】:

【参考方案2】:

按照建议使用两个循环。 比如:

int n, s;
for(n=0; n<10; n++)
   for(s=0; s<space; s++)
      u[n][s] = 1;
   

应该可以。

【讨论】:

【参考方案3】:

C++ 没有等价于

for n in range(0,10):
    u[n][:] = 1

您将不得不编写u[n][:] = 1 表示的循环。幸运的是,基于范围的 for 循环非常简单。看起来像

int foo[3][3];
for (auto& row : foo)
    for (auto& col : row)
        col = 1;

【讨论】:

【参考方案4】:

我不记得在 C++ 中快速的方法了。恐怕你必须在每个表中循环。

这看起来像这样(承认space 是一个已知整数):

for (int i = 0; i < 10; i++)
    for (int j = 0; j < space; j++)
        u[i][j] = 1;

【讨论】:

【参考方案5】:

您将不得不使用两个循环。现代 C++ 有一些技巧可以让初始化这些循环变得简单,但这里有一个基本的 C 示例,它可以在任何地方工作:

#define TIME_MAX 100
#define SPACE_MAX 350

int u[TIME_MAX][SPACE_MAX];
int i, j;

for (i = 0; i < TIME_MAX; i++)
    for (j = 0; j < SPACE_MAX; j++)
        u[i][j] = 1;

【讨论】:

以上是关于数组在 C++ 中包含来自 python 的范围的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cython 中包含 C++ 所需的路径?

ValueError:数组不能在 Python3.X 的 SpectralCoclustering 中包含 infs 或 NaNs

如何在 CURLOPT_POSTFIELDS 中包含数组数据? [复制]

华为机试真题 C++ 实现通信误码2022.11 Q4 新题

在 Qt Creator 中包含 Python

为啥我会收到此错误? “[variable] 没有命名类型”在 C++ 中用于 std::string 数组,即使它已被包含并且在同一范围内