gpt4 book ai didi

c++ - vector 复制不起作用,但手动 push_back 可以

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:13 25 4
gpt4 key购买 nike

我有一个奇怪的行为,这可能是初学者的问题:

在类成员函数中,我试图用另一个 vector 替换给定的 vector 。

template <typename FITNESS_TYPE>
void BaseManager<FITNESS_TYPE>::replacePopulation (
typename Population<FITNESS_TYPE>::chromosome_container replacementPopulation)
{
_population.getChromosomes().clear();

//This inserts the contents of replacementPopulation into _population.getChromosomes()
for (
typename Population<FITNESS_TYPE>::chromosome_container::iterator
it = replacementPopulation.begin();
it != replacementPopulation.end();
++it)
{
_population.getChromosomes().push_back(*it);
}


//But this does nothing...
std::copy(replacementPopulation.begin(),replacementPopulation.end(), _population.getChromosomes().begin());


for (typename Population<FITNESS_TYPE>::chromosome_container::iterator it = _population.getChromosomes().begin(); it!=_population.getChromosomes().end(); ++it)
{
std::cout << "CHROM: " << **it << std::endl;
}
}

对应的getChromosomes() getter如下:

template <typename FITNESS_TYPE>
class Population : public printable {
public:
typedef typename std::vector<Chromosome::BaseChromosome<FITNESS_TYPE>* > chromosome_container;
typedef typename chromosome_container::const_iterator const_it;
typedef typename chromosome_container::iterator it;
const chromosome_container& getChromosomes() const { return _chromosomes; }
chromosome_container& getChromosomes() { return _chromosomes; }
private:
chromosome_container _chromosomes;
};

我很困惑。为什么复制不像 for 循环那样工作?

最佳答案

push_back调整 vector 的大小,同时写入 begin()之后的内容假设空间已经存在。你想要的看起来像这样:

std::copy(replacementPopulation.begin(),
replacementPopulation.end (),
std::back_inserter(_population.getChromosomes()));

#include <iterator>得到back_inserter .

本质上,std::back_inserter是一个执行 push_back 的迭代器每次写入内容时。

关于c++ - vector 复制不起作用,但手动 push_back 可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com