gpt4 book ai didi

c++ - 如何从指针容器中找到一个元素?

转载 作者:行者123 更新时间:2023-11-28 02:48:01 29 4
gpt4 key购买 nike

我有类(class)容器*(当然是指针),我尝试通过类(class)编号在柜台搜索类(class)!但是下面的代码不起作用

const Course findCourse(const int number) const
{
Container<Course*, std::allocator<Course*> >::iterator ret_iterator =
std::find_if(courses.begin(), courses.end(), FindFromPointer(number));

if (ret_iterator == courses.end()){
return Course::DUMMY_COURSE;
}

return *(ret_iterator);
}

struct FindFromPointer
{
FindFromPointer(int i) : n(i) { }
bool operator()(Course * course) const { return n == course->getNumber(); }
private:
int n;
};

** 容器:这是包含上面定义的类(class)容器的时间表,这意味着我有包含类(class)指针容器的类(class) shcedule **

template <template <class, class> class Container>
class Schedule {
public:
//<somthing>
//.
//.
private:
Container<Course*, std::allocator<Course*> > courses;

最佳答案

从函数 findCourse 返回 *(ret_iterator) 会导致编译错误,因为 *(ret_iterator) 是指向 Course< 的指针。迭代器的 operator* 返回对容器元素的引用,而容器的元素是指向 Course 的指针。正确的代码应该是这样的:

return *( *ret_iterator );

或更清楚:

Course * ret_pointer = *ret_iterator;
return * ret_pointer;

另一个问题:函数findCourse被声明为const,这就是为什么类Schedule的所有成员都是const 在这个函数里面。当您使用 courses.begin() 调用 std::find_if 时,将调用 begin() 的 const 版本。它返回 const_iteratorstd::find_if 分别返回 const_iterator 。但是......你将它分配给 iterator 并且它应该会导致编译器错误。正确的代码是:

Container<Course*, std::allocator<Course*> >::const_iterator ret_iterator =
std::find_if(courses.begin(), courses.end(), FindFromPointer(number));

或者您可以从 findCourse 的声明中删除 const 限定符。

关于c++ - 如何从指针容器中找到一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736467/

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