struct myNode{
int a ;
int b ;
myNode *nextNode ;
myNode *prevNode ;
} ;
我可以使用COUT垂直显示这样一个列表的所有节点,例如(伪代码):
while (myList){
cout << myList->a << " " << myList->b << "\n" ;
increment myList (myList = myList->nextNode) ;
}
结果将是:
a1 b1
a2 b2
a3 b3
.
.
.
an bn
不是垂直显示,而是想水平显示它们,结果类似于:
a1 a2 a3 a4 ... an
b1 b2 b3 b4 ... bn
换句话说,如何在C ++中垂直打印多个n个元素,然后向右移动并开始垂直(从第一行)平行于前一列打印其他n个元素,依此类推...... / p>
感谢您的回答。
L,
答案 0 :(得分:0)
要在控制台中跳回一行需要特定于操作系统的方法,在这种情况下不建议使用。我能想到的最简单的方法是使用两个循环,如下所示:
while (myList)
{
cout << myList->a << " ";
increment myList (myList = myList->nextNode);
}
cout << "\n";
// set myList to begin
while (myList)
{
cout << myList->b << " ";
increment myList (myList = myList->nextNode);
}
答案 1 :(得分:0)
我没有看到问题。 E.g。
int const n = blahblah;
for( auto p = myList; p != nullptr; p = p->nextNode )
{
cout << setw( n ) << p->a;
}
cout << endl;
for( auto p = myList; p != nullptr; p = p->nextNode )
{
cout << setw( n ) << p->b;
}
cout << endl;
<强>更新强>
在a comment中,OP解释了他认为上述问题:
“如果我们使用上面提出的解决方案,我们需要为列表的每个键值编写一个For或While循环。
代码复制非常容易 - 通过命名和参数化序列输出操作来解决,例如
template< class Pointer, class MemberPointer >
void display_value_sequence( Pointer const my_list, MemberPointer const m )
{
int const n = blahblah;
for( auto p = my_list; p != nullptr; p = p->nextNode )
{
cout << setw( n ) << p->*m;
}
}
void foo()
{
// ...
using Node = decltype( *myList );
display_value_sequence( myList, &Node::a ); cout << endl;
display_value_sequence( myList, &Node::b ); cout << endl;
}
有人可能会对此进行抽象,例如:一些函数返回vector<string>
项的字符串表示,依此类推,但我认为这还为时过早。
免责声明:代码未触及编码器的手。