C++ 中的一个问题.只是想要一种简单的方法来做到这一点/

a question in c++. just want a easy way to do this/

本文关键字:方法 简单 一种 这一点 一个 问题 C++      更新时间:2023-10-16

I have class

类 A { int x; int y}

set<A> myset;

如何迭代此集合?我想触摸类中的 x、y 变量。谢谢

我想触摸类中的 x、y 变量。

在你的类中,x和y是私有的。默认情况下,类的成员是私有的。你不能直接设置 x 和 y,否则你会得到编译器错误。您需要提供一种在 A 的公共接口中设置 x 和 y 的方法,例如:

class A
{
int x; int y; // these are by default private
public:
   // set X
   void setX(int anX) {x = anX;}
   // set y
   void setY(int aY) {y = aY;}
};
// iterate over preexisting elements
set<A>::iterator iter;
for(iter = myset.begin(); iter != myset.end(); ++iter)
{
   iter->x = 5; // COMPILER ERROR, x is private
   iter->setX(5); //works, calls setter
   iter->setY(6); //works, calls setter
}

阻止你的集合工作的另一件事是缺乏与 A 实例进行比较的operator <set需要它来保持元素的有序和独特性。

class A
{
   ...
   bool operator < (const A& other) const
   {
       // return true if this < other
       // up to you to define
   }
};
set<A>::iterator it;
for(it = myset.begin(); it != myset.end(); ++it)
{
    // your code
}

或者,您可以使用 Boost::foreach:

BOOST_FOREACH(A& a, myset)
{
    // your code
}

编辑:请参阅评论:)A 中的所有变量都声明为私有变量,因此无法进行任何访问。我想除了调整类并提供 getter 和 setter 或使成员变量公开之外,没有其他方法。

set<A>::iterator myIterator;
for(myIterator = mySet.begin();
    myIterator != mySet.end();
    myIterator++)
{
 // do something
}