打印std :: strings不产生任何输出

时间:2019-04-07 05:49:31

标签: c++ string

我正在为辅助项目构建一个小的模板堆栈类,它似乎工作正常。但是,当我用字符串尝试时,它似乎不起作用。我没有编译错误或警告。我只是没有输出。我对C ++有点生疏,但我没想到会遇到一个看起来如此简单的问题。

Example of some output

我的主要功能(用于测试):

#include <iostream>
#include <fstream>
#include <string>
#include "myStack.h"

int main()
{

    bool repeat = true;
    int option = -1;

    std::cout << "Option (1 - String | 2 - Integer) : ";
    std::cin >> option;
    std::cout << "\n";

    switch (option)
    {

    case 1:
    {
        myStack<std::string> stringStack;
        stringStack.push("!");
        stringStack.push("there");
        stringStack.push("Hello");
        stringStack.show();
        break;
    }

    case 2:
    {
        myStack<int> intStack;
        intStack.push(3);
        intStack.push(2);
        intStack.push(1);
        intStack.show();
        break;
    }

    default:
        break;
    }

    std::cout << "\n";

    return 0;
}

我的堆栈类的相关部分:

#pragma once

template <typename T>
class myStack
{

  private:
    T *elements;
    size_t capacity;

  public:
    myStack();
    T top();
    size_t size();
    void push(T pushed);
    void pop();
    bool isEmpty();
    void show(std::ostream &out = std::cout);
};

template <typename T>
myStack<T>::myStack()
{
    this->elements = NULL;
    this->capacity = 0;
}


template <typename T>
void myStack<T>::push(T pushed)
{
    this->elements = (T *)realloc(this->elements, (this->capacity + 1) * sizeof(T));
    this->elements[this->capacity] = pushed;
    this->capacity++;
}

template<typename T>
void myStack<T>::show(std::ostream &out)
{
    for (int i = this->capacity - 1; i >= 0; i--)
    {
        out << this->elements[i] << std::endl;
    }
}

1 个答案:

答案 0 :(得分:3)

的使用
this->elements = (T *)realloc(this->elements, (this->capacity + 1) * sizeof(T));
this->elements[this->capacity] = pushed;

管理std::string数组是不正确的。使用realloc分配内存是可以的。但是,它不能正确初始化对象。第二行是未正确初始化对象的原因。

如果允许您使用std::vector,请使用它。

template <typename T>
class myStack
{

  private:
    std::vector<T> elements;

  ...
};

然后,可以将capacity替换为elements.size()

push可以简化为:

template <typename T>
void myStack<T>::push(T pushed)
{
    this->elements.push_back(pushed);
}

您还必须相应地更新show()