【问题标题】:C++ equivalent of Python's : for array indexingC++ 等价于 Python 的 : 用于数组索引
【发布时间】:2018-07-10 22:14:10
【问题描述】:

在 C++ 中使用数组时,有没有一种简单的方法可以像 Python 的 : 那样一次访问数组的多个索引?

例如我有一个长度为 100 的数组 x。如果我想要 Python 中这个数组的前 50 个值,我可以写 x[0:50]。在 C++ 中,除了 x[0,1,2,...,49] 之外,还有更简单的方法来访问数组的同一部分吗?

【问题讨论】:

  • 取决于您对该切片执行的操作。我倾向于一对指针。
  • 除了 x[0,1,2,...,49] 吗?我猜你的意思是x[0], x[1], x[2]... 用于单个元素。访问数组的一部分的方法是通过迭代器
  • 如果数组元素是原始类型,std::memcpy 将是一个不错的选择。
  • @Quentin 我想分配/更新数组的那部分。
  • 这还取决于您是在谈论原始 C 样式数组还是 std::array。 (而std::vector 是另一个需要考虑的类)。我会推荐使用这些类,这里的答案可能会有所帮助。 stackoverflow.com/questions/11102029/… 如果您想修改原始数组中的相关元素,您可以考虑将其设为 int 引用或指针数组。或者只是让函数进行修改接受beginend 参数。

标签: c++ arrays indexing slice


【解决方案1】:

你可以做下面的事情

int main()
{
  int myints[]={10,20,30,40,50,60,70};
  array<int,5> mysubints;

  std::copy(myints, myints+5, mysubints.begin());

  for (auto it = mysubints.begin(); it!=mysubints.end(); ++it)
        std::cout << ' ' << *it;

  std::cout << '\n';
}

你也可以用向量代替数组数据类型

【讨论】:

    【解决方案2】:

    最接近的可能是使用迭代器。在&lt;algorithm&gt; 中,您可以找到一组作用于迭代器范围的函数,例如:

    #include <algorithm>
    
    int x[100];
    int new_value = 1;
    std::fill(std::begin(x), std::begin(x) + 50, new_value);
    

    这会将范围内的值更改为new_value&lt;algorithm&gt; 中的其他函数可以复制范围(std::copy),将函数应用于范围内的元素(std::transform)等。

    如果您使用它,请注意std::beginstd::end 仅适用于数组,不适用于指针!使用std::vector 之类的容器会更安全、更容易。

    【讨论】:

    • 问题说你需要检索前 50 个值之类的东西
    猜你喜欢
    • 2017-02-13
    • 2012-05-11
    • 2011-11-25
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多