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

136

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

一些输出的例子

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

#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;
    }
}
萨胡

用于

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

管理std::strings的数组是不正确的。可以使用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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章