在列中显示Deques的向量

displaying a vector of deques in columns

本文关键字:向量 Deques 显示      更新时间:2023-10-16

我正在尝试显示deques( std::vector<std::deque<int>> v)的向量

v.at(0).at(0) v.at(1).at(0) v.at(2).at(0) v.at(3).at(0)
v.at(0).at(1) v.at(1).at(1) v.at(2).at(1) v.at(3).at(1)
v.at(0).at(2) v.at(1).at(2) v.at(2).at(2) v.at(3).at(2)
              v.at(1).at(3)               v.at(3).at(3)
                                          v.at(3).at(4)

向量的第一部分固定为7,实际列的大小是动态的,但是取决于用户选择的操作。

我正在尝试

之类的东西
int row = 0;
int column;
for (column = 0; column < v.at(row).size(); column++){
      cout << "v["<< row <<"]["<< column << "]" << v.at(row).at(column) << "t";
  while (row < v.size()){
    cout << endl;      
    row++;
  }
}

我会遇到

之类的错误
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: vector
make: *** [Pile.h] Abort trap: 6

拥有其中一个大脑的日子之一。有人可以帮助我按照我想要的方式打印出来吗?

这是一个示范程序,显示了任务的一种方法。

#include <iostream>
#include <iomanip>
#include <vector>
#include <deque>
#include <algorithm>
int main() 
{
    std::vector<std::deque<int>> v =
    {
        { 0, 1, 2 },
        { 0, 1, 2, 3 },
        { 0, 1, 2 },
        { 0, 1, 2, 3, 4 }
    };
    size_t n = std::max_element( v.begin(), v.end(),
                                 []( const auto &x, const auto &y )
                                 {
                                    return x.size() < y.size();
                                 } )->size();
    for ( size_t i = 0; i < n; i++)
    {
        for ( size_t j = 0; j < v.size(); j++ )
        {
            std::cout << std::setw( 4 );
            if ( i < v[j].size() )
            {
                std::cout << v[j][i];
            }
            else
            {
                std::cout << "";
            }
        }
        std::cout << std::endl;
    }
    return 0;
}

其输出是

   0   0   0   0
   1   1   1   1
   2   2   2   2
       3       3
               4

首先,我建议获得最大队列大小

std::size_t  maxQ { 0U };
for ( auto const & q : v )
    maxQ = std::max(maxQ, q.size());

现在,您可以在(0U, maxQ((行环路)编写循环时编写元素,否则可以进行空间。

for ( auto i = 0U ; i < maxQ ; ++i )
 {
   for ( auto j = 0U ; j < v.size() ; ++j )
      if ( i < v[j].size() )
         ; // print v[j][i]
      else
         ; // print space
   std::cout << std::endl; // endl of line
 }

我留给你的单元打印细节