C++ 在列中显示DEQUE向量
我试图像这样显示一个deques向量(C++ 在列中显示DEQUE向量,c++,c++11,vector,deque,C++,C++11,Vector,Deque,我试图像这样显示一个deques向量(std::vector 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
std::vector 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++;
}
}
有那种无聊的头脑的日子。有人能帮我按我想要的方式打印出来吗?首先,我建议获得最大队列大小
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
}
用于(自动i=0U;i#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;
}
将参数传递给
at
时抛出错误,该参数不是有效的索引。如果查看for
循环,在第二次迭代时,行
必须等于或大于v.size()
。该条件尝试调用v.at(行)
然后必须失败。我不清楚代码背后的原因。你在while
循环中执行++row
,因此你(我称之为)有一个表示向量中维数的自变量。然后你在这里使用这个未经检查的变量:v.at(row).
。您应该努力避免不这样做,并始终使用size()
确定元素的数量。我的代码不起作用,我的推理有缺陷,今天早上我很难。我试图找出如何在上面显示的输出中获得向量中的数据,你对如何做到这一点有什么想法吗?我给你的主要建议是直接向前编写两个循环,然后进行eit她在该单元格中输出条目,如果相应列中没有那么多条目,则为空。您需要在任何列中获取最大项数,或者迭代,直到没有任何列输出条目。该循环应如下所示:for(column=0;row
--您的行
变量由于内部while
循环而出错。我怀疑您实际上没有尝试过您的解决方案。您需要按列打印。此解决方案的复杂性将取决于您忽略的部分。@FrançoisAndrieux-嗯……我忘记了行的结尾(谢谢);补充。在我看来,OP很难管理索引(行和列)。这个答案(我希望)应该解释一下怎么做。它几乎完美了,所有的东西都被拉到左边了,我应该用iomanip或其他库做些什么吗?@BrendanJackson-对不起,我不明白你想用iomanip
或其他库做什么我的编译器不喜欢你正在使用的闭包/lambda,“在lambda参数[](const auto&x,const auto&y)中不允许出现错误:'auto'”“您使用的不是c++11吗?我不使用的是什么?”BrendanJackson当您需要显式编写const std::deque&x,const std::deque&y时,就是这样,您是我的英雄!
#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