小编Tam*_*abó的帖子

多线程矢量

我正在研究一个使用自己创建的地图来存储数据的C++项目 - 在这个意义上的地图更像是一个"地理"地图,所以是一个图像.有不同的线程读取和写入它.地图的数据存储在整数向量的std向量中.它的大小不会改变,只有某些像素的内容通过getter和setter函数.

我的问题如下:有时一切都运行得很好,但更常见的是我得到了损坏的图像,因为像素的值会改变符号或者与它们应该完全不同.这可能是对像素的线程读/写访问的问题,如果是这样,我应该使用什么而不是标准向量?我已经尝试使用互斥锁来确保只有一个线程读取或写入向量,但是这些读/写操作经常发生,如果我在每次操作时锁定向量,应用程序就会变得太慢.

c++ multithreading vector

4
推荐指数
1
解决办法
2104
查看次数

基于模板的成员初始化,其中模板是抽象类的衍生物

我正致力于实现一种遗传算法,该算法应该适用于抽象基因组类型.

我的设置是这样的:

class AbstractGenome
{
  virtual void init() = 0;
  virtual void mutate() = 0;
  .
  .
  .
};

class GeneticAlgorithm
{
  std::vector<AbstractGenome*> genomes;

  void init(int numGenomes)
  {
    for (int i=0; i < numGenomes; ++i)
    {
      AbstractGenome *genome = new DerivedGenome(); <=This is where my problem is
      genome->init();
      genomes.push_back(genome);
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

其中DerivedGenome稍后(在某些时候)定义为:

class DerivedGenome: public AbstractGenome
{
  void init() { do stuff; }
  void mutate() {do stuff; }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我对DerivedGenome的唯一了解是它派生自AbstractGenome - 因此我不能对DerivedGenome构造函数进行一般调用.

我能想到解决这个问题的一种方法是从GeneticAlgorithm派生并覆盖所有基因组类型的init函数,但我想知道是否有办法以更好的方式解决这个问题,例如通过模板?

非常感谢提前.

c++ templates class

3
推荐指数
1
解决办法
56
查看次数

标签 统计

c++ ×2

class ×1

multithreading ×1

templates ×1

vector ×1