STL迭代器不起作用?无法弄清楚为什么

时间:2011-11-24 04:14:15

标签: c++ stl iterator set const

我有一个有一个私人成员的班级:

std::set<unsigned long> Sset;

我对此功能有疑问:

原型:

Set& Union (Set&, Set&);

代码:

    Set& Set::Union (Set& s1, Set& s2)
{
    set<unsigned long>::iterator a;
    set<unsigned long>::iterator j;

    for (a = s1.Sset.begin(); a!=s1.Sset.end(); ++a)
        for (j = s2.Sset.begin(); j!=s2.Sset.end(); ++j)
            if (*a = *j)
            {
                Sset.insert(*a);
                break;
            }

    return *this;
}

我得到编译器错误表达式必须是*a=*j

的可修改左值

使用迭代器j一切正常,但它不接受*a

任何帮助或解释? 感谢

6 个答案:

答案 0 :(得分:4)

你应该在if语句中使用==吗?

答案 1 :(得分:3)

经典错误:-) - 比较需要两个等号

if (*a == *j)

答案 2 :(得分:3)

if (*a = *j)

是作业

if (*a == *j)

答案 3 :(得分:3)

您可以一次性将一组插入另一组:

std::set<int> s1, s2;

s1.insert(s2.begin(), s2.end());

集合成员是唯一的,所以没有什么可担心的。

答案 4 :(得分:2)

您无法指定set::iterator指向的值。

为什么?

因为集合保持其元素的顺序set,特别是排序)以便快速检索,所以你可以' t手动告诉它放置元素的位置。

相反,insert元素位于正确的位置。

话虽如此 - 您的意思是使用==代替=吗?

答案 5 :(得分:0)

#include <algorithm>

...
std::set_union(s1.begin(), s1.end(), s2.begin(), s2.end() ... )


http://en.cppreference.com/w/cpp/algorithm/set_union