在列中显示deques矢量

时间:2017-12-04 16:04:20

标签: c++ c++11 vector deque

我试图像这样显示一个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

有一个大脑的日子。有人可以帮我打印出我想要的方式吗?

2 个答案:

答案 0 :(得分:2)

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

#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

答案 1 :(得分:0)

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

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
 }

我留给你细胞印刷细节