热门标签 | 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);

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


推荐阅读
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277。作者:Bob Lee,日期:2012年9月15日。题目描述:给定n个木棍,求可以组成的不同三角形的数量,最多15根木棍。 ... [详细]
  • 本文探讨了基础二分法在数据报告生成中的应用及其优化策略。通过分析二分法在处理大规模数据集时的高效性和准确性,提出了若干改进措施,以提升数据报告的生成速度和质量。具体包括算法的并行化处理、数据预处理技术的应用以及异常值的处理方法,旨在为数据分析师提供更为高效和可靠的工具。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
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社区 版权所有