我必须将第一个size元素从一组名为“人口”的解决方案(一个类)复制到一组名为“ parents”的解决方案数组中。我的迭代器有一些问题,因为我应该在普通的for循环之间做一个混合解决方案 和for与迭代器。想法是这样的:当我处于for的第i个迭代时,我声明一个指向起点的新迭代器 人口,然后将迭代器前进到第i个位置,将这个解决方案元素复制到父母中[i]
Solution* parents; //it is filled somewhere else
std::set<Solution> population; //it is filled somewhere else
for (int i = 0; i < size; i++) {
auto it = population.begin();
advance(it, i);
parents[i] = *it;
}
弹出带有以下语句的两个错误消息:'表达式:无法取消引用结束映射/设置迭代器'
和“表达式:无法推进最终映射/设置迭代器”
关于如何使用此技巧的任何想法吗?我知道混合数组和集合有点不好,我应该使用向量而不是数组?
答案 0 :(得分:1)
您使用Context.getSharedPreferences()
。
std::copy_n
答案 1 :(得分:0)
我必须将第一个size元素从集合[..]复制到数组中
您可以使用std::copy_n
。
for (int i = 0; i < size; i++) {
auto it = population.begin();
advance(it, i);
此问题是您在每次迭代中都在链表上进行迭代。这使复制操作从通常的线性复杂度变为二次方。
表达式:无法取消引用结束映射/设置迭代器'
这里的问题似乎是您的集合中至少不包含size
个元素。如果没有那么多元素,则不能复制size
个元素。我建议您在集合较小时复制较少的元素。
我应该使用向量而不是数组?
可能是。数组很大吗?向量的大小在编译时未知吗?如果是这样,请使用向量。
答案 2 :(得分:0)
似乎size
的设置不正确。为了确保您的代码表现出预期的效果,您应该直接使用集合的大小:
auto it = population.begin();
for (int i = 0; i < population.size(); i++) {
parents[i] = *it;
++it;
}
这也可以用更简单的表达式解决:
std::copy(population.begin(), population.end(), parents);