如何比较两个向量?两者都包含整数值:
void interaction(vehicles::position &pos, int number, enviroment object)
{
for (auto i = object.x.begin(); i<object.x.end(); i++)
for (auto j = object.y.begin(); j<object.y.end(); j++)
if (pos.x[number] == object.x[i] && pos.y[number] == object.y[j])
cout << "\nInteraction\n";
}
第一个向量(在课堂上声明):
int remaining_move;
struct position{
vector<int> x;
vector<int> y;
}pos;
第二
struct enviroment
{
vector<int> x;
vector<int> y;
string graphic;
};
错误:
答案 0 :(得分:6)
object.x[i]
这是错误的。如果i
是一个数字索引,它会起作用,但它不是:它是一个迭代器。
相反:
*i
因此,我进一步建议将其称为i
之外的其他内容; it
怎么样?
另外,你的内循环条件是错误的。您写了 [编辑:现在你已经解决了问题,出于某种原因] i
,而不是j
。两次。
答案 1 :(得分:2)
我建议先把它们排序,这就是我要这样做的方法:
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<int> v3;
std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
答案 2 :(得分:2)
如果您只是分别在pos.x[number]
和pos.y[number]
中寻找object.x
和object.y
,为什么不只是:
auto itX = std::find(object.x.begin(), object.x.end(), pos.x[number]);
auto itY = std::find(object.y.begin(), object.y.end(), pos.y[number]);
if (itX != object.x.end() && itY != object.y.end()) {
std::cout << "\nInteraction\n";
}
答案 3 :(得分:1)
要比较一个向量元素,请比较插槽中的值:
std::vector<int> a;
std::vector<int> b;
//...
if (a[0] == b[0])
{
// elements are equal
}
使用循环可以比较更多元素:
for (unsigned int i = 0; i < a.size(); ++i)
{
if (a[i] != b[i])
{
break;
}
}
其中一个荆棘是载体大小不同的时候。您必须决定您对该主题的行为。
<algorithm>
中可能存在一些可以在矢量上使用的算法。