如何将一组对象复制到对象数组?

时间:2018-12-11 16:59:19

标签: c++ arrays iterator set

我必须将第一个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;
}

弹出带有以下语句的两个错误消息:'表达式:无法取消引用结束映射/设置迭代器' 和“表达式:无法推进最终映射/设置迭代器”
关于如何使用此技巧的任何想法吗?我知道混合数组和集合有点不好,我应该使用向量而不是数组?

3 个答案:

答案 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);