小编ped*_*oel的帖子

迭代时从STL集中删除元素

我需要浏览一个集合并删除符合预定义条件的元素.

这是我写的测试代码:

#include <set>
#include <algorithm>

void printElement(int value) {
    std::cout << value << " ";
}

int main() {
    int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    std::set<int> numbers(initNum, initNum + 10);
    // print '0 1 2 3 4 5 6 7 8 9'
    std::for_each(numbers.begin(), numbers.end(), printElement);

    std::set<int>::iterator it = numbers.begin();

    // iterate through the set and erase all even numbers
    for (; it != numbers.end(); ++it) {
        int n = *it; …
Run Code Online (Sandbox Code Playgroud)

c++ iterator std set c++-standard-library

140
推荐指数
4
解决办法
9万
查看次数

停止gen_server时选择原因的语义是什么?

Erlang文档说明了以下关于gen_servers的内容:

...

请注意,出于正常,关闭或{shutdown,Term}之外的任何其他原因,假定gen_server由于错误而终止,并使用error_logger:format/2发出错误报告.

资料来源:http://www.erlang.org/doc/man/gen_server.html#Module : terminate-2


由于除了这三个原因以外的任何原因都被认为是错误,我推断其原因normal,shutdown并被{shutdown, Reason}认为是正常行为.

我想在开发人员选择这三个理由在正常情况下停止gen_server时,开发人员有动机,但我不太确定如何确定使用哪一个.

所以,当我应该使用normal,shutdown{shutdown, Reason}

erlang erlang-otp

4
推荐指数
1
解决办法
332
查看次数

通过在另一个集上调用erase(iterator)来从一个集合中删除元素.这是正常的行为吗?

我发现可以使用接受迭代器的erase方法从另一个集合中删除一个集合中的元素.我无法解释为什么会发生这种情况,我想知道这是否是正常行为.

所以,让我们设置场景:

由于逻辑原因(即,它们是不相交的集合),我有一组在两个STL集中分隔的对象.

std::set<Obj> set_a;
std::set<Obj> set_b;
Run Code Online (Sandbox Code Playgroud)

set_a包含我想要的对象.如果在set_a中找不到此对象,则创建一个空对象并将其插入set_b.然后我对所需对象执行一些计算,如果满足某个条件,我将其删除.

std::set<Obj>::iterator it = set_a.find(o);
std::set<Obj>::iterator end = set_a.end();

if (it == end) {
    it = set_b.lower_bound();
    end = set_b.end();

    if (it == end || *it != o) {
        it = set_b.insert(it, o);
    }
}

// do calculations with it
if (/*condition is met*/) {
    // erase it
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道如何删除这个对象.由于我有迭代器,我想删除直接使用它.但是当你使用擦除迭代器"指向"另一组中的对象时会发生什么?我使用的文档中没有任何内容(http://www.cplusplus.com/reference/stl/set/erase/),所以我做了以下测试.

#include <iostream>
#include <iterator>
#include <algorithm>
#include <set>
#include <sstream>

// streams
using std::cout;
using std::ostream_iterator;
using std::ostringstream;
// data structures
using std::set; …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl set

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

标签 统计

c++ ×2

iterator ×2

set ×2

c++-standard-library ×1

erlang ×1

erlang-otp ×1

std ×1

stl ×1