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);
}
答案 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 *
是未定义的行为。