要使用哪个列表类?

时间:2014-08-19 12:46:01

标签: c++ mfc

我想在函数的生命周期中创建一个短命列表,以收集CPoint个对象的列表,然后迭代这些对象。我想使用CTypedPtrList,但我不确定如何设置它以接受不是从CObject派生的对象; CPoint来自结构tagPOINT

是否可以将CTypedPtrListCPoint一起使用?

否则,我应该使用std::list<CPoint>吗? //我已经开始使用std:list并且可以成功构建一个列表,但我找不到迭代列表的方法。

std::list<CPoint*> pointList;
// Add to the list with list.push_front(new CPoint(x, y));
std::for_each(pointList.begin(), pointList.end(), [](pointList* cur)
{
    TRACE("APoint: %f, %f\n", cur->x, cur->y);
});

我试过了,但我不断被告知for_each不是std的成员。我尝试添加#include <for_each>(就像我必须为list做的那样),但它仍然无法识别。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我推荐std::vector。此外,这里不需要指针:

std::vector<CPoint> pointList;
// ...
pointList.emplace_back(x, y);
// ...
for (const CPoint& p : pointList)
{
    TRACE("APoint: %f, %f\n", p.x, p.y);
}

您似乎使用的是非常旧的C ++编译器。请尝试以下方法:

std::vector<CPoint> pointList;
// ...
pointList.push_back(CPoint(x, y));
// ...
for (std::vector<CPoint>::const_iterator it = pointList.begin();
                                        it != pointList.end(); ++it)
{
    TRACE("APoint: %f, %f\n", it->x, it->y);
}

答案 1 :(得分:2)

修复编译错误#include <algorithm>并更改为:

std::for_each(pointList.begin(), pointList.end(), [](CPoint* cur)
{                                                   ^^^^^^^^
    TRACE("APoint: %f, %f\n", cur->x, cur->y);
});

或更简单地使用for range循环:

for(auto& p : pointList)
{
    TRACE("APoint: %f, %f\n", p->x, p->y);
}

注意: