c++ - 如何在 C++ 中为堆栈集声明 Iterator

标签 c++ stl iterator stack set

我正在创建一个类,它是一组堆栈。我想使用迭代器在末尾获取元素并访问其函数。但是我得到以下错误

setOfStacks.cpp:40:6: error: expected ';' after expression
            set< stack<Type> >::iterator it = mSetOfStacks.end();
               ^
               ;

该类使用模板并像这样声明

template<typename Type>
class SetOfStacks 
{
public: 
        SetOfStacks(int capacityPerStack);
    void            push(Type object);
    Type            pop();
    bool            isEmpty();
private:
    void            createNewStackWithElem(Type object);
private:

        int                 mStackCapacity;
        set<stack<Type> >   mSetOfStacks;
};

然后在我的插入函数中,我尝试在最后获取堆栈

set< stack<Type> >::iterator it = mSetOfStacks.end();
if( *it->size() < mStackCapacity )
    *it->push(object);

这是我在尝试声明迭代器时遇到错误的地方 setOfStacks.cpp:40:6: 错误:应为“;”表达后

我也试过了

set<stack<Type> >::iterator it = mSetOfStacks.end(); 

但是还是不行

整个推送功能

template<typename Type>
void SetOfStacks<Type>::push(Type object) {
    // if entire set is empty make a new stack
    if( mSetOfStacks.empty() ) {
        stack<Type> newStack;
        newStack.push(object);

        mSetOfStacks.insert(newStack);
    }
    else {
        // check if current stack within limits
        set< stack<Type> >::iterator it = mSetOfStacks.end();
        if( *it->size() < mStackCapacity )
            *it->push(object);
        else {
            // duplicate code, make another function
            stack<Type> newStack;
            newStack.push(object);

            mSetOfStacks.insert(newStack);
        }
    }
}

最佳答案

在函数模板中,嵌套名称iterator 是一个从属名称,它被认为是一个对象而不是一个类型。您想要使用 typename 关键字来指示 iterator 是一种类型:

typename std::set<std::stack<Type> >::iterator it = mSetOfStacks.end();
// ^-- here

模板分两个阶段进行解析:在第一阶段,在不了解模板参数或实体的情况下解析代码的逻辑组件,具体取决于模板参数可能看起来像什么。如果存在依赖于模板参数的嵌套名称,编译器会假定此名称是对象而不是类型,除非您使用 typename 关键字明确声明它是类型。

关于c++ - 如何在 C++ 中为堆栈集声明 Iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923792/

相关文章:

c++ - 寻找一种优雅且非侵入式的方式来访问类的私有(private)方法

c++ - 使用与索引不同的类访问 C++ 映射

Scala函数错误: type mismatch

loops - Rust:迭代 iter() 或向量本身

c++ - 当基类和派生类都继承自 boost::enable_shared_from_this 时出现错误的弱指针

c++ - 方法返回的幕后是什么?

c++ - 反向传播二维神经元网络 C++

c++ - 是否有类似于 QByteArray 的标准 C++ 类?

c++ - 并行 libstdc++ 模式不对迭代器使用并行 for_each 算法

c++ - 如何检查字符串是否包含标点符号c++