c++ - 如何在 C++ 中以最佳方式循环遍历类成员向量的元素?
问题描述
我有class
一个成员的 A vector<class B>
。我想以一种干净的方式vector
从 A 外部循环遍历它。class
我需要使用 B 的公共功能对其进行操作。
为此,我想到了一个函数int get_next_element(B * in_B)
,如果我正确加载了下一个元素,我可以返回 0,否则返回 -1。
我想通过使用来做到这一点iterator
,但我发现了两个问题。首先,我找不到将 an 转换为 a 的简洁方法iterator
(pointer
似乎我可以iterator
像 a 一样使用 an pointer
,但我不确定这是一个好的解决方案)。其次,我需要检查 my 是否引用了一个值iterator
,并且由于最接近“空迭代器”的.end()
元素是我不知道如何初始化它的元素。如果我初始化它(空)并有引用.end()
,如果我向它添加一些东西,它就不会引用任何可比较的东西。
我可以有一个额外的东西int
来跟踪我所在的元素,但是int
每当我添加元素等时,我都必须管理它。
我考虑将迭代代码放在class
A 之外,但我可能需要在循环期间更改或访问单个元素,这样会形成一个复杂/大的迭代块。
我将如何以干净的方式(例如int get_next_element(B * in_b)
)解决这个问题?
编辑:这是一些代码:标题:
class B {
public:
B();
void set_size(int in_size);
int get_size();
protected:
int mSize;
};
class A {
public:
A();
void add_B(B in_B);
int get_next_element(B * in_B);
protected:
std::vector<B> mObjects;
};
cpp文件:
B::B() {
// Stuff
}
void B::set_size(int in_size) {
mSize = in_size;
}
int B::get_size() {
return mSize;
}
A::A() {
// Stuff
}
void A::add_B(B in_B) {
mObjects.push_back(in_B);
}
int A::get_next_element(B * in_B) {
// ToDo : handle elements
}
主要:
int main() {
A test_a;
for (int i = 0; i < 5; i++) {
B tmp_b;
tmp_b.set_size(i);
test_a.add_B(tmp_b);
}
B iterator_b;
while (0 == get_next_element(& iterator_b)) {
if (iterator_b.get_size > 2) {
B tmp_b;
tmp_b.set_size(iterator_b.get_size - 2);
test_a.add_B(tmp_b);
iterator_b.set_size(2);
}
}
}
因此,基本上A
包含一堆B
s 并且可以帮助 main 遍历它们并(在此示例中)将它们切割成更小的部分,而main
. 有很多维度/方式可以做到这一点,这也是我想“隐藏”尽可能多的代码的部分原因A
。
(这有点简化,就像B可能必须有内部关系,但基本上就是这样)
解决方案
考虑使用基于范围的 for 循环( C++1x
)。
class A {
private:
std::vector<class B> vec;
public:
std::vector<class B>& get_vec() { return vec; }
};
A a_instance;
for (B &b : a_instance.get_vec()) {
b.print();
std::cout << "b = " << b << std::endl;
std::cout << "&b = " << &b << std::endl;
}
不幸的是,这不允许向前看,除非您自己跟踪索引。
推荐阅读
- python-3.x - 一维 CNN 的输入高度必须保持不变吗?
- c# - c# 生成具有趋势和最大和最小偏移量的随机数
- python - 如何将大字符串转换为数据框?
- php - 如何在 MySQL 中搜索包含两个或多个以空格分隔的单词的字符串字段?
- java - 如何在 IDE 中附加 graalvm-ce-19.2.0 源代码?
- python - 使用 Keras Tensorflow 2.0 获取渐变
- r - 如何根据自己在r中的值重复向量的值
- r - 如何找到一个值的 ID 号?
- javascript - 如何让 redux 商店更新 react-testing-library 的 dom
- java - 如何使用 CrudRepository 按组合字段排序?