热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用std::ostream作为打印函数的参数

如何解决《使用std::ostream作为打印函数的参数》经验,为你挑选了1个好方法。

我一直习惯cout打印声明,但现在我想学习打印passing the stream,就像 void print(std::ostream&) const;我目前的打印功能一样

template 

void Mystack::print()
{
    for (int i = 0; i <= top; i++)
    {
        std::cout <

我有两个问题:

    从我上面实现的普通打印功能切换到使用的打印功能有什么好处ostream.

    如何ostream在我的功能中实现.我试图ostream从互联网来源了解但无法理解.请帮忙.

以下是完整的运行代码:

//*************STACK CODE***************//

//VERY GOOD EXAMPLE TO UNDERSTAND RULE OF THREE FOR BEGINEERS http://www.drdobbs.com/c-made-easier-the-rule-of-three/184401400
//RULE OF THREE : Video : https://www.youtube.com/watch?v=F-7Rpt2D-zo
//Thumb Rule : Whenever we have class which has members pointing to heap space we should implement Rule of three.
//Concepts : Shallow Copy and Deep Copy

#include 
template 
class Mystack
{
private:
    T *input;
    int top;
    int capacity;
public:
    Mystack();
    ~Mystack();
    void push(T const& x);
    void pop();
    T& topElement() const;
    bool isEmpty() const;
    void print();
};
template 
Mystack::Mystack()
{
    top = -1;
    capacity = 5;
    input = new T[capacity];
}
template 
Mystack::~Mystack() //Since we are using destructor explictly we need to apply Rule of 3
{
    delete [] input;
}
template 
void Mystack::push(T const& x)  //Passing x by Const Reference // Valus of x cannot be changed now in the function!
{
    if (top + 1 == capacity)
    {
        T *vec = new T[capacity * 2];
        for (int i = 0; i <= top; i++)
        {
            vec[i] = input[i];
        }
        delete []input; // Avoiding Memory Leak.
        input = vec;
        capacity *= capacity;
    }
    top++;
    std::cout <
void Mystack::pop()
{
    if (isEmpty())
    {
        throw std::out_of_range("Stack Underflow");
    }
    else
    {
        std::cout <<"The popped element is" <
bool Mystack::isEmpty() const
{
    if (top == -1)
    {
        std::cout <<"Is Empty" <
T& Mystack::topElement() const
{
    if (top == -1)
    {
        throw std::out_of_range("No Element to Display");
    }
    else
    {
        std::cout <<"The top element is : " <
void Mystack::print()
{
    for (int i = 0; i <= top; i++)
    {
        std::cout < s1;
    Mystack s2;
    Mystack s3;
    int choice;
    int int_elem;
    float float_elem;
    char char_elem;
    std::cout <<"Enter the type of stack" <> choice;
    if (choice == 1)
    {
        int  ch = 1;
        while (ch > 0)
        {
            std::cout <<"\n1. Push ";
            std::cout <<"2. Top ";
            std::cout <<"3. IsEmpty ";
            std::cout <<"4. Pop ";
            std::cout <<"5. Exit ";
            std::cout <<"6. Print"<> ch;
            switch (ch)
            {
            case 1:
                std::cout <<"Enter the number to be pushed" <> int_elem;
                s1.push(int_elem);
                break;
            case 2:
                std::cout <<"Get the TOP Element" < 0)
        {
            std::cout <<"\n1. PUSH" <> ch;
            switch (ch)
            {
            case 1:
                std::cout <<"Enter the number to be pushed" <> float_elem;
                s2.push(float_elem);
                break;
            case 2:
                std::cout <<"Get the TOP Element" < 0)
        {
            std::cout <<"\n1. PUSH" <> ch;
            switch (ch)
            {
            case 1:
                std::cout <<"Enter the number to be pushed" <> char_elem;
                s3.push(char_elem);
                break;
            case 2:
                std::cout <<"Get the TOP Element" <

MondKin.. 7

The benefit of switching to the ostream version is that in the case you later need to print to other places besides std::cout then you can do it with the same function implementation, whereas in this moment if you want to print to a file you would need to use a different function.

An example of how to implement it is instead of doing this:

void print()
{   
    std::cout <<"Print something always to cout" <

You do this (notice we are passing a reference):

void print(std::ostream& os) 
{   
    os <<"Print something to wherever the caller wants to" <

Now instead of calling the function like:

print();

你将调用这样的函数打印到cout:

print(std::cout);

或者像这样打印到文件:

std::ofstream some_file("test.txt");
a.print(some_file);

请参阅,使用相同的功能,您可以决定打印的位置.



1> MondKin..:

The benefit of switching to the ostream version is that in the case you later need to print to other places besides std::cout then you can do it with the same function implementation, whereas in this moment if you want to print to a file you would need to use a different function.

An example of how to implement it is instead of doing this:

void print()
{   
    std::cout <<"Print something always to cout" <

You do this (notice we are passing a reference):

void print(std::ostream& os) 
{   
    os <<"Print something to wherever the caller wants to" <

Now instead of calling the function like:

print();

你将调用这样的函数打印到cout:

print(std::cout);

或者像这样打印到文件:

std::ofstream some_file("test.txt");
a.print(some_file);

请参阅,使用相同的功能,您可以决定打印的位置.


推荐阅读
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
  • 深入探讨栈和队列的应用实例——铁轨问题(Rails, ACM/ICPC CERC 1997, UVa 514)。该问题设定在一个城市火车站,涉及n节车厢从A方向驶入车站,并需按照特定顺序驶出B方向的铁轨。本文将通过算法实现来验证特定顺序的可行性。 ... [详细]
  • 本文详细探讨了一道涉及算法、C++及图论知识点的题目,适合对算法竞赛感兴趣的读者。通过分析题目【这是一道大水题】,我们将探索如何高效地处理区间查询与更新问题。本文由技术作者【ღCauchyོꦿ࿐】撰写,旨在帮助读者掌握相关技术和解题技巧。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢! ... [详细]
  • 第五周项目一——体验常成员函数(1)
    设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成 ... [详细]
  • CC++如何复制 ... [详细]
  • 名字空间是为了防止名字污染在标准C++中引入的。它可以将其中定义的名字隐藏起来,不同的名字空间中可以有相同的名字而互不干扰,使用时用域操作符(::)来引用。namespace名字{ ... [详细]
  • 如何解决《C++getline传递文件或cin》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《将流绑定到自身》经验,为你挑选了1个好方法。 ... [详细]
  • 解开一个困扰自己多时的小问题——从std::cout和endl说起
    解开一个困扰自己多时的小问题小序今天上班的时候问了一起工作的Sidney同学一个小问题,显然他是研究过了的,不过他当时没有给出我答案。这个问题着实困扰了我好长时间捏~~晚上吃的小葱蘸 ... [详细]
author-avatar
把默认珀尔_430_394
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有