【问题标题】:How to get to the Nth element of a 2d std::vector (`std::vector< std::vector<T> >`)?如何到达 2d std::vector (`std::vector< std::vector<T> >`) 的第 N 个元素?
【发布时间】:2011-12-27 00:36:30
【问题描述】:

我们得到了一些 int el_position 数字,这是我们元素在二维向量 (std::vector&lt; std::vector&lt;int&gt; &gt; matrix(5, std::vector&lt;int&gt;(4))) 的平面表示中想要的位置。

如果我们有这样的矩阵的意义

11 21 31 41 51
61 71 81 91 101

我们得到了el_position==7,我们需要获取第二行的第二个元素。可以用std stl 2d向量做这样的事情吗?如何通过给定元素在展平数组中的位置来获取元素的值?

【问题讨论】:

    标签: c++ stl vector matrix std


    【解决方案1】:

    当然可以:

     row = el_position % row_length;
     col = el_position / row_length;
    

    【讨论】:

      【解决方案2】:
      size_t size_y = matrix.front().size(); // to get your Y dimension
      return matrix[el_position / size_y][el_position % size_y];
      

      【讨论】:

      • 但是,正如我在回答中指出的那样,请注意 matrix.front().size() 以产生您需要的价值。
      • @MichaelKrelin-hacker:同意,为了避免任何可能的麻烦,我建议在 C++11 的情况下使用 boost::arraystd::array (std::vector&lt;std::array&lt;int, N&gt;&gt;)
      • std::vector&lt;int[N]&gt;或许更全面?
      • C 数组?不,我不会推荐它,至少对于 C++
      • 我们在这里意见不一:)
      【解决方案3】:

      您只需获取n/W 的一个索引和另一个 - n%W,其中W 是宽度(或行长,等等)。请注意,实际上在向量的向量中,您可能有不同长度的向量,因此由您决定。

      【讨论】:

        【解决方案4】:
        // Assuming fixed dimensions:
        matrix[el_position/size][el_position%size];
        

        / 是整数除法,因此计算我们必须传递的完整行数以找到我们正在寻找的行,% 是整数除法的余数,因此找到我们应该偏移多远行。

        如果您的内部向量之一的大小不同,这将失败。你可以用两个断言来检查这个假设:

        assert(matrix.size()); // needed for the front element to be valid
        assert(std::count(matrix.begin(), matrix.end(), matrix.front().size())
               == matrix.size()); // the count will be the number of elements 
                                  // if it's correct
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-02
          • 2016-03-31
          • 2017-09-01
          • 2019-10-20
          • 2019-11-07
          • 2020-01-26
          • 2020-05-21
          相关资源
          最近更新 更多