小编Ram*_*Ram的帖子

std :: prev和std :: next对std :: list的有效性

我将迭代器存储到列表中:

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它本身在某些时候变得无效?

c++ iterator stdlist c++11

2
推荐指数
1
解决办法
1237
查看次数

插入单独的线程时std :: map读取

我有这样的地图

map<string,A>
Run Code Online (Sandbox Code Playgroud)

现在,当我从线程I迭代地图时,线程II正在向它插入一些内容.这种插入是否会影响阅读?

c++ dictionary thread-safety

0
推荐指数
1
解决办法
474
查看次数

为什么catch没有处理这个错误C++

当我在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)

c++ exception

-3
推荐指数
1
解决办法
152
查看次数

标签 统计

c++ ×3

c++11 ×1

dictionary ×1

exception ×1

iterator ×1

stdlist ×1

thread-safety ×1