STL迭代器不起作用?不明白为什么

发布于 2024-12-18 04:16:30 字数 707 浏览 2 评论 0原文

我有一个类,它有一个私有成员:

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

有任何帮助或解释吗? 谢谢

I have a class which has one private member:

std::set<unsigned long> Sset;

And I have a problem with this function:

Prototype:

Set& Union (Set&, Set&);

Code:

    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;
}

I get compiler error expression must be a modifiable lvalue at *a=*j

Everything is OK with iterator j, but it won't accept *a

Any help, or explanation?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

不甘平庸 2024-12-25 04:16:30

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

should you be using == in the if statement?

ぇ气 2024-12-25 04:16:30

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

if (*a == *j)

Classic mistakes :-) - comparison requires two equals signs

if (*a == *j)
深陷 2024-12-25 04:16:30
if (*a = *j)

是一个作业

if (*a == *j)
if (*a = *j)

is an assignment

if (*a == *j)
森罗 2024-12-25 04:16:30

您可以一次性将一个集合插入另一个集合:

std::set<int> s1, s2;

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

集合成员是唯一的,因此无需担心其他问题。

You can just insert one set into another in one go:

std::set<int> s1, s2;

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

Set members are unique, so there's nothing else to worry about.

安稳善良 2024-12-25 04:16:30

您无法分配给 set::iterator 指向的值。

为什么?

因为集合按照任何感觉的顺序保留其元素集合,具体来说,是排序的)以允许快速检索,所以您可以'不必手动告诉它在哪里放置元素。

相反,将元素插入到正确的位置。

话虽如此,您的意思是使用 == 而不是 = 吗?

You can't assign to the value pointed to by a set::iterator.

Why?

Because sets keep their elements in whatever order it feels like (set, specifically, is sorted) to allow for quick retrieval, so you can't manually tell it where to put elements.

Instead, insert the element at the right place.

Having said that -- did you mean to use == instead of =?

那一片橙海, 2024-12-25 04:16:30
#include <algorithm>

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


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

#include <algorithm>

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


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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文