C++报错
流年剑客
这个作者很懒,什么都没留下…
展开
-
C++: vector iterator not incrementable,迭代器失效问题
导致此问题的其中一个原因:在进行迭代器遍历容器时,原来的容器不应该再继续压入任何元素了,否则迭代器可能失效。下面我们来以vector为例讨论一下迭代器失效背后的原理,以及什么时候会失效,什么时候正常。先上结论:vector的迭代器失效的原因是,vector进行了改变容量大小(注意是capacity而非size)的操作,这个时候,会重新申请内存空间,并将原来的元素进行拷贝,这个时候指向原来位置的iterator仍旧指向原来的位置,而这时原来的位置的元素早已在vector扩容操作里被删除了,故此时itera原创 2021-08-18 11:27:30 · 1091 阅读 · 0 评论 -
Expression: front() called on empty vector
Expression: front() called on empty vector令人头疼的报错报错的信息提示是空的vector不能调用front()函数,不过相信很多小伙伴会和题主一样疑惑,自己明明没有用vector的front()函数,甚至连vector都没有用到,为什么会报这个错误???题主跟踪调试后得出答案,我用的priority_queue在用top()函数的时候已经为空,所以出现这样的报错,而priority_queue的底层容器默认是vector故报这样的错误。至于为什么报错说我用原创 2021-06-06 19:36:13 · 4033 阅读 · 6 评论 -
报错:表达式必须含有常量值
示例错误代码void test(int n){ array<int,n>arr;}报错error: ‘n’ is not a constant expression解释因为n不是一个常数,需要运行时才能确定分配内存的大小,自然无法在编译时确定,所以在编译的时候会报错。解决办法当分配内存大小需要在运行时才能确定时,一般使用动态分配内存。使用完之后别忘了delete(array new对应array delete)void test(int n){ int*原创 2021-06-02 11:45:03 · 6208 阅读 · 1 评论