C++ 中的一个问题.只是想要一种简单的方法来做到这一点/
a question in c++. just want a easy way to do this/
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
}
相关文章:
- 一种在C++中读取TXT配置文件的简单方法
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++ 将静态方法转换为简单方法
- 将一系列数字映射到 CPP 中的值的简单方法
- 引用基类模板的成员变量的简单方法
- 学习数据结构和算法的简单方法
- 有没有简单的方法可以将"02:00"转换为分钟,比如 120?
- boost::variant - 对变体应用算术的最简单方法
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 类的方法和对象。参考?智能指针?简单的初始化?
- 使用新运算符C++创建多维数组的简单方法
- 有没有一种简单的方法可以从 c++ 中的路径获取文件名?
- 有没有一种简单的方法可以在对象向量上调用构造函数?