C ++设计:实例和指针的容器

时间:2010-04-10 05:07:31

标签: c++ pointers containers

我在想什么。

我有一个班级Polygon,它组成了一个Line的矢量(这里是另一个班级)

class Polygon
{
  std::vector<Line> lines;

public:
  const_iterator begin() const;

  const_iterator end() const;

}

另一方面,我有一个函数,它计算指向行的指针向量,并根据这些行返回指向Polygon的指针。

 Polygon* foo(Polygon& p){

  std::vector<Line> lines = bar (p.begin(),p.end());

  return new Polygon(lines);

 }

以下是问题:

我总是可以添加一个多边形(矢量

有没有比解除引用向量的每个元素并将其分配给现有向量容器更好的方法?

//for line in vector<Line*> v
//vcopy is an instance of vector<Line>
vcopy.push_back(*(v.at(i))

我想不是,但我真的不喜欢这种做法。

希望我能够说服班级的作者改变它,但我现在不能将我的编码基于这个事实(而且我害怕性能损失)。

提前致谢。

2 个答案:

答案 0 :(得分:3)

您可以transform()容器:

struct deref { // NO! I don't want to derive, LEAVE ME ALONE!
    template<typename P>
    const P& operator()(const P* const p) const { return *p; }
};

// ...
    vector<Line*> orig; // assume full ...
    vector<Line> cp(orig.size());
    transform(orig.begin(), orig.end(), cp.begin(), deref());

答案 1 :(得分:0)

这取决于您需要多久做一次以及具体如何。有一个转换迭代器这样的东西,你可以做一个这样的

vcopy( deref_iter( v.begin() ), deref_iter( v.end() ) );

会做你想要的。然而,这并不比你拥有的那么容易,并且使用指针向量和返回对象向量的简单函数将更容易实现和使用。