在列中显示双端队列向量

displaying a vector of deques in columns

我正在尝试像这样显示双端队列向量 (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

度过了那些无聊的一天。谁能帮我按我想要的方式打印出来?

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

std::size_t  maxQ { 0U };

for ( auto const & q : v )
    maxQ = std::max(maxQ, q.size());

现在您可以编写一个循环 (0U, maxQ((行的循环),当可用时写入元素,否则 space。

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
 }

我把单元格打印细节留给你

这是一个演示程序,展示了完成任务的一种方法。

#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