C++;向量/优先级队列列表? 为什么C++不允许这样的事情发生?< /P>
我需要有多个优先级队列,其数量将在运行时确定 这无法编译C++;向量/优先级队列列表? 为什么C++不允许这样的事情发生?< /P>,c++,list,stl,vector,priority-queue,C++,List,Stl,Vector,Priority Queue,我需要有多个优先级队列,其数量将在运行时确定 这无法编译 std::vector 有更好的方法吗?正确的代码是: std::vector<std::priority_queue<A> > std::vector 请注意,Class不属于A,priority\u queue中有一个下划线,两个直角括号之间需要一个空格(>被解析为右移运算符) 这还要求A小于可比性(如果不是,则必须提供一个供优先级队列使用的比较函数)。这应该可以正常工作。只是语法应该是: std::vec
std::vector
有更好的方法吗?正确的代码是:
std::vector<std::priority_queue<A> >
std::vector
请注意,Class
不属于A
,priority\u queue
中有一个下划线,两个直角括号之间需要一个空格(>
被解析为右移运算符)
这还要求
A
小于可比性(如果不是,则必须提供一个供优先级队列使用的比较函数)。这应该可以正常工作。只是语法应该是:
std::vector<std::priority_queue<A> >
std::vector
(注意结尾附近的空格(“”)。编译失败时会出现什么错误…?您在代码中到底是如何使用它的?好的,我可能会匆忙发布此消息。Netbeans抱怨(红线)当我写代码的时候?我认为这可能是非法的,不是吗?@cyrux:不,为什么这应该是非法的?我知道类和下划线的事情。我不知道空格的事情。可能是为什么它出了问题。
std::priority\u queue*free\u list;
这合法吗?@cyrux:是的,但是为什么你想要一个指向priority\u queue的指针代码>?仔细想想,我认为队列数组是不可能的。数组应该有起始地址和结束地址,队列应该增长。这将使其非法?@cyrux,使用new
或new[]创建的对象
在运行时不要更改。向量
有一个指向内存块的指针,该内存块(可能)大小随数组的大小而变化。向量只存储指针,指针的大小在运行时不会改变,因此对象的大小不会改变。因此,是的,优先级队列
的数组是合法和有效的,但您可能最好使用向量
或列表
。这仅当您有一个蹩脚的编译器无法区分运算符>
和级联模板(例如MSVC 6.0)的结尾时才需要这对任何一个象征主义的C++编译器来说都是没有问题的。哦,所以它是把代码> >代码>作为右移,哇。我在Linux上有NETBeBox。btw@jde:C++03语言根本不支持这一点,只有C++0x会修复它。@jdehaan:错。任何严格符合C++03的编译器都不会接受这一点。谢谢Georg,Axel,我以为这只是一个m编译程序的改进。很好地知道新的C++标准强制执行这项工作。