尝试使用std :: find时出现转换错误

时间:2018-06-11 04:07:40

标签: c++ std

no suitable conversion function from "std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<int, size_t, ptrdiff_t, int *, const int *, int &, const int &>>>>" to "int *" exists

当我将鼠标悬停在代码中的“std :: find”上时显示。我已经找到了0个结果,意味着什么。我试过删除并添加指针,但无济于事。

我正在尝试编写一种算法来创建一个位置向量,其中我的游戏中出现了血液飞溅。我的代码如下所示:

Blood.hpp

#pragma once
#include <vector>

class Blood {
public:
    int x, y;
    std::vector<int> bloodx;
    std::vector<int> bloody;

    Blood(int x, int y);
    void makeBloodied(int x, int y);
    bool isBloodied(int x, int y);
};

(我也对如何正确插入向量感到困惑,如果可以作为一个子问题回答,我会很感激。)

Blood.cpp

#include "main.hpp"

Blood::Blood(int x, int y) : x(x), y(y) {
}

void Blood::makeBloodied(int x, int y) {
    std::vector<int>::iterator it;
    bloodx.insert(it, x);
    bloody.insert(it, y);
}

bool Blood::isBloodied(int x, int y) {
    int *resultx = std::find(bloodx.begin(), bloodx.end(), x);

}

1 个答案:

答案 0 :(得分:1)

  

如何正确插入向量:

您可以使用npx create-react-app my-app将某些内容放在最后,或std::vector::push_back()插入特定位置(在给定的迭代器中)。

在你的情况下,我认为你想做:

std::vector::insert()

或者,如果要将其插入索引bloodx.push_back(x); ,则可以执行以下操作:

idx
  

为什么我收到此错误?

使用bloodx.insert(bloodx.begin() + idx, x); 是正确的。但是,它会返回std::find,无法将其转换为std::vector<int>::iterator

我建议使用int *,或者转换为auto resultx,如下所示:

int *

但是,要小心,因为如果向// dereference iterator and take address (only if item found) auto it = std::find(bloodx.begin(), bloodx.end(), x); int *resultx = (it == bloodx.end()) ? NULL : &*resultx_it; 添加元素,则迭代器和指向其元素的指针将失效。

  

如何检查是否找到了元素

如果找不到元素,std::vector将返回迭代器std::find,它位于向量结束之后。

std::vector::end

这里要小心,不要强制转换bool found = std::find(bloodx.begin(), bloodx.end(), x) == bloodx.end(); ,因为解除引用int *是未定义的行为。