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

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


推荐阅读
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 不确定性|放入_华为机试题 HJ9提取不重复的整数
    不确定性|放入_华为机试题 HJ9提取不重复的整数 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
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社区 版权所有