【发布时间】:2020-04-04 04:36:30
【问题描述】:
一类元素,过去与其他相似元素存储在一个向量中。
但现在,它已被移除并移动到父对象中自己的字段中。
class OldParent {
vector<char> OldCollection = { 'A', 'B', 'C' };
}
class NewParent {
char A = 'A';
vector<char> NewCollection = { 'B', 'C' };
}
向量所持有的类型比字符复杂得多,它是一个正常结构的向量。
所以实际的原始类型看起来像这样:
struct ActualType {
string val1;
int val2;
double val3;
}
vector<vector<ActualType>> OldCollection;
// vector that has been separated out
vector<ActualType> SeparatedCollection;
问题在于,许多原始代码在整个旧集合上使用迭代器,而我认为可以实现此更改的一种干净方法是创建一个迭代器,该迭代器的工作方式就像分离的字段从未分离过一样。这样就不必更改大部分原始代码。
不过,我也绝对愿意接受新想法。
用例如下所示: 更改意味着其中一个数字将永久存储在向量之外。
vector<int> nNums = {1,2,3};
void UseCase(int x)
{
int toRemove = 0;
for (auto& num : nNums)
{
if (num - x < 0)
{
toRemove++;
x -= num;
}
else
{
num -= x;
break;
}
for (int i = 0; i < toRemove; ++i)
nNums.erase(nNums.begin());
}
}
【问题讨论】:
-
public class OldParent... 这是什么? C#? -
@IndianaKernick 哎呀错字了。
-
如果我理解正确的问题,您可以创建自己的类型并重载迭代器将使用的通用运算符(如 * 和 ++)。然后你可以说“如果你到达旧集合的末尾 (OldCollection.end()) 然后返回separatedCollection 并翻转一些布尔值。然后一旦你尝试再次增加一些布尔值现在可以返回OldCollection。结尾()”。这会起作用,但不是解决问题的干净方法。您可能应该只是通过并修复旧代码。也许您也可以只使用 Old 的第一个索引来分隔?
-
你应该添加你期望如何使用类/变量。'
-
@appleapple 它是一个存储几个字段的结构体。