gpt4 book ai didi

c++ - c++ 中的错误?-c++ 中的 set_difference 不返回 std::copy

转载 作者:行者123 更新时间:2023-11-27 23:26:49 28 4
gpt4 key购买 nike

我有如下代码:

typedef std::set<std::string> set_of_strings; 
set_of_strings s1, s2, result1;
some_func()
{
s1.insert("1-2");
s1.insert("1-1");
s1.insert("3-4");
s2.insert("1-2");
s2.insert("1-3");
s2.insert("3-4");

set_of_strings::iterator s1_begin = s1.begin();
set_of_strings::iterator s1_end = s1.end();
set_of_strings::iterator s2_begin = s2.begin();
set_of_strings::iterator s2_end = s2.end();
set_of_strings::iterator result_begin = result1.begin();
td::insert_iterator<set_of_strings> result_inserter = std::inserter(result1, result_begin);

set_difference(s1_begin, s1_end,s2_begin, s2_end,result_inserter); //This is the problem line
}

我得到的编译错误是overloading ambiguity std::copy(....问题是 set_difference 返回类似 return copy(first1,last1,result);

请查看here对于 set_difference 的算法。

set_difference 返回如下:

copy(..)

如果是std::copy就不会有任何问题。

我尝试将我的语句放在如下的 block 中:

{
using namespace std;
set_difference(s1_begin, s1_end,s2_begin, s2_end,result_inserter);
}

但这行不通。我知道问题出在我们为自己的目的编写并在许多地方使用的复制函数。这里我想使用 std::copy。谁能帮忙。

最佳答案

如果您编写了自己的复制函数,编译器可以在与 std::copy 相同的范围内看到它,并且它是一个可能的候选者,那么肯定会导致歧义。

没有你可以设置的魔法标志让它使用 std::copy,但我认为如果你把你自己的拷贝放在一个命名空间中并且不 使用那个命名空间,编译器将无法找到它并退回到std::copy。也就是说,我认为我无法理解您想要创建一个适用于集合迭代器的替代 copy 的情况,如果您编写了一个通用的,它可能不应该被称为 copy因为它会导致像这样的歧义错误无穷无尽。

关于c++ - c++ 中的错误?-c++ 中的 set_difference 不返回 std::copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com