【问题标题】:How to resize 2d vector如何调整二维向量的大小
【发布时间】:2021-01-15 01:25:50
【问题描述】:
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    
    vector<vector<int> > matrix;
    
    matrix.resize(3, vector<int>(4, 1));

    for (size_t i = 0; i < 3; i++)
    {
        for (size_t j = 0; j < 4; j++)
        {
            cout << matrix[i][j];
        }
        cout << endl;
    }
    
    matrix.resize(5, vector<int>(7, 0));

    for (size_t i = 0; i < 5; i++)
    {
        for (size_t j = 0; j < 7; j++)
        {
            cout << matrix[i][j];
        }
        cout << endl;
    }

    return 0;
}

'''

据我所知,当我们使用“resize()”调整向量的大小超过原始容量时,原始空间中的值将保留,新值将分配给新空间。

ma​​trix.resize(5, vector(7, 0)); 行中,如果我们执行该行,我认为矩阵会像

1111000 
1111000 
1111000 
0000000 
0000000

类似的东西。

但是程序停止了,

我想知道为什么它不起作用。

【问题讨论】:

    标签: c++


    【解决方案1】:
    matrix.resize(5, vector<int>(7, 0));
    

    只添加大小为 7 的新向量,而不修改实际向量。 只需将实际向量的大小调整为 7:

    for (auto &row: matrix) row.resize(7);
    

    所以现在可以工作了:

    1111000                                                                                                                                                                                     
    1111000                                                                                                                                                                                     
    1111000                                                                                                                                                                                     
    0000000                                                                                                                                                                                     
    0000000
    

    【讨论】:

      【解决方案2】:

      我使用在线编译器https://onlinegdb.com/BkwcGuAAD测试了您的代码

      您的列未调整大小(仅行调整大小)。运行您当前的代码会产生

      1 1 1 1 0 0 33                                                                                                                                   
      1 1 1 1 0 0 33                                                                                                                                  
      1 1 1 1 0 0 49     << notice some columns have random numbers?                                                                                                                            
      0 0 0 0 0 0 0                                                                                                                                   
      0 0 0 0 0 0 0   
      

      也尝试调整列的大小

      matrix[0].resize(7,0);
      matrix[1].resize(7,0);
      matrix[2].resize(7,0);
      
      matrix.resize(5, vector<int>(7, 0));
      

      你应该得到类似下面的东西

      1 1 1 1 0 0 0                                                                                                                                 
      1 1 1 1 0 0 0                                                                                                                                 
      1 1 1 1 0 0 0                                                                                                                                 
      0 0 0 0 0 0 0                                                                                                                                 
      0 0 0 0 0 0 0                                                                                                                                 
                     
      

      【讨论】:

        【解决方案3】:

        通过 C++ 参考 (http://www.cplusplus.com/reference/vector/vector/resize/)

        void resize (size_type n);
        void resize (size_type n, const value_type& val);
        

        调整容器大小,使其包含 n 个元素。

        如果 n 小于当前容器大小,则内容将减少到它的前 n 个元素,移除超出的元素(并销毁它们)。

        如果 n 大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到 n 的大小。如果指定了 val,则新元素被初始化为 val 的副本,否则,它们被值初始化。

        如果 n 也大于当前容器容量,则会自动重新分配已分配的存储空间。

        请注意,此函数通过插入或删除元素来更改容器的实际内容。


        我认为如果我在 "val" 中放入更长的向量,编译器会理解。

        也就是说,我以为它会理解这种增加的“n”。

        但编译器只会观察“n”参数本身是否改变。

        由于这个原因,我的代码无法正常工作。

        如果你想使用 size() 函数增加向量的大小,请注意你应该调整你手上的原始行值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-30
          • 2011-02-08
          • 1970-01-01
          • 2017-05-10
          • 1970-01-01
          相关资源
          最近更新 更多