我将迭代器存储到列表中:
list<int> l;
l.push_back(21); l.push_back(1); l.push_back(31); l.push_back(41);
auto it = l.find(21);
Run Code Online (Sandbox Code Playgroud)
在我的算法中,每当我删除一个节点时,我都需要添加相邻的元素.像这样的东西:
auto prev = std::prev(it);
auto next = std::next(it);
*prev = *prev + *next;
l.erase(it);
Run Code Online (Sandbox Code Playgroud)
如您所见,我需要确保所有边界条件.在以下情况下,做什么std::prev()
和std::next()
返回什
it
它本身在某些时候变得无效?我有这样的地图
map<string,A>
Run Code Online (Sandbox Code Playgroud)
现在,当我从线程I迭代地图时,线程II正在向它插入一些内容.这种插入是否会影响阅读?
当我在linux机器上运行它时,我希望catch块能够捕获异常.而我得到了分段错误.为什么是这样 ?它不应该打印"抓住异常"
void handle_eptr(std::exception_ptr eptr) // passing by value is ok
{
try {
if (eptr) {
std::rethrow_exception(eptr);
}
} catch(const std::exception& e) {
std::cout << "Caught exception \"" << e.what() << "\"\n";
}
}
int main()
{
char *c =(char*) 0x10;
std::exception_ptr eptr;
try {
std::string s = c;
} catch(...) {
std::cout<< "Caught exception";
//eptr = std::current_exception(); // capture
}
// handle_eptr(eptr);
std::cout << "Normal Exit";
}
Run Code Online (Sandbox Code Playgroud)