【发布时间】:2021-12-02 05:10:36
【问题描述】:
按照代码的和平,我试图找到另一个与this具有相同坐标的对象。如何正确操作?
auto& organism_vector = world->get_vector();
auto attacked_organism = find_if(begin(organism_vector), end(organism_vector), [this](const unique_ptr<Organism>& attacked_organism)
{
return this->get_coordinates() == attacked_organism->get_coordinates() && *this != *attacked_organism;
});
另外一件事,当我终于设法得到这个迭代器时,如何引用attacked_organism 类方法?
*attacked_organism.get_coordinates();
【问题讨论】:
-
迭代器在很多情况下可以像指针一样使用。根据运算符类型,某些操作不可用,但通常增量(
++)、解引用(一元*)和箭头运算符可用作(in)等式检查(==、!=;这些比较但是位置,而不是那些位置的对象)。特别是下面的循环应该使用每个迭代器类型的迭代器替换的指针:int array[10] {...}; auto pos = std::begin(array); auto const end = std::end(array); while (pos != end) { std::cout << *array << '\n'; ++pos; } -
在您的最后一个代码 sn-p 中,
*运算符应用.运算符,因为运算符优先级,使得表达式无效的。此外,你有一个 unique_ptr 的迭代器,所以这是另一个取消引用的级别:(**attacked_organism).get_coordinates();(*attacked_organism的类型是std::unique_ptr<Organism>&,再次取消引用你有一个可以使用的Organism&类型的表达式使用.运算符) -
@fabian 如果我想使用 -> 运算符怎么办?
-
你可以在
std::unique_ptr<Organism>&类型的表达式上使用它:(*attacked_organism)->get_coordinates();
标签: c++ c++11 vector this unique-ptr