【问题标题】:array include range from python in c++数组在 C++ 中包含来自 python 的范围
【发布时间】: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 - 否则,操作向量需要两个循环,因为它在列表上没有切片语法

标签: python c++ arrays slice


【解决方案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;
          

          【讨论】:

            猜你喜欢
            • 2010-12-09
            • 1970-01-01
            • 2018-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-27
            • 2010-10-05
            相关资源
            最近更新 更多