Реализация перекладывания одного стека в другой

Рейтинг: 1Ответов: 1Опубликовано: 20.04.2015

Уже задавал вопрос о том, как переложить один стек в другой, исключая повторяющиеся элементы, но у меня это не получается это реализовать. Вроде все нормально, но программа падает на определённом шаге. Подскажите,что не так?

UPD:

for (int i = 0; i < curSize; ++i) func(stOne, stTwo, curSize, i); 

где

void func(myStack <string> &stOne, myStack <string> &stTwo, int &curSize, int n)
{
    string compTmp,tmp;

    for (int i = 0; i < curSize; ++i)
    {
        tmp = stOne.pop();
        if ( i == n ) 
            {
                compTmp = tmp;
                stTwo.push(tmp);
            }
        else if ( i < n ) 
            stTwo.push(tmp);
        else if ( i > n )
            if ( compTmp.compare(tmp) != 0 ) 
                stTwo.push(tmp);
            else curSize--;

    }

    for (int i = 0; i < curSize; ++i) stOne.push(stTwo.pop());
}

Ответы

▲ 1

Мне кажется стоит это сделать попроще, например сохранять элементы в векторе и таким образом проверять уникальность

void f(std::stack<std::string>& a, std::stack<std::string>& b)
{
    std::vector<std::string> v;
    for (int i = 0; i < a.size(); i++)
    {
        std::string &item = a.top();
        a.pop();
        if (std::find(v.begin(), v.end(), item) != v.end())
        {
            v.push_back(item);
            b.push(item);
        }
    }
}