我一直在尝试使用新引入的C++ 11 std :: thread功能在Cygwin下编译多线程hello-world程序,但没有成功.我自己编译并安装了GCC 4.7.2,并且相同的代码在Linux下使用相同版本的GCC时没有任何问题.我得到的第一个错误是编译器无法识别-pthread标志.经过一段时间的研究,我注意到有人在Cygwin上说这个标志应该是-lthread.我做了更改,错误消失了,但又发生了一系列错误,告诉我线程不是std的成员.我想知道它是否是由安装过程中编译器的错误配置引起的,或者在Cygwin下根本不支持std :: thread?
我在调用以下代码时遇到问题:
#include<deque>
using namespace std;
deque<int> deq = {0,1,2,3,4,5,6,7,8};
for(auto it = deq.begin(); it != deq.end(); it++){
if(*it%2 == 0)
deq.erase(it);
}
Run Code Online (Sandbox Code Playgroud)
这导致了分段错误.在查看问题后,我发现问题在于STL管理deques的迭代器的方式:如果被擦除的元素更接近deque的末尾,用于指向擦除元素的迭代器现在将指向NEXT元素,但不是前一个元素vector::iterator.据我所知,从修改的循环条件it != deq.end(),以it < deq.end()可能可能解决这个问题,但我不知道是否有遍历&在"标准形式"一个双端队列擦除某些元件,使得代码可以是其他容器类型兼容的方式同样.