我正在讨论这个问题大约一周,我有两个向量,例如vec1和vec2,我想在搜索后找到vec2中vec1的值,返回它们的索引,例如:
vector<int>vec2 = { 1, 2, 2, 4 };
vector<int>vec1 = { 1, 2, 4 };
我想要像这样的伪代码和这个结果: 伪代码:
for i = 0 to vec2.size() do
return vec1 indexes in vec2;
end
结果:
PASS1:
1 0 0 0
PASS2:
0 1 1 0
PASS3:
0 0 0 1
最后的决赛:
0 0 0 1
我的代码(不编译):
我的代码:
#include <vector>
#include <iostream>
using namespace std;
vector<int> find_index(vector<int>vec2, vector<int>vec1)
{
std::vector<double> tmp;
for (int i = 0; i<vec2.size(); i++)
{
for (int j = 0; j<vec2.size(); j++)
{
if (vec2[i] == vec1[j])
{
tmp.push_back(i);
}
}
}
return tmp;
}
int main()
{
vector<int>vec2 = { 1, 2, 2, 4 };
vector<int>vec1 = { 1, 2, 4 };
cout << find_index(vec2, vec1);
getchar();
return 0;
}
答案 0 :(得分:0)
您编写的代码无法编译,原因有两个:
对double
向量使用tmp
项类型。 vector<double>
不会隐式转换为所需的函数结果类型vector<int>
。
标准库没有定义向量的输出,因此cout <<
中的main
向量不会编译。
要输出矢量,您可以定义如下函数:
void write_to( ostream& stream, vector<int> const& v )
{
for( int i = 0; i < int( v.size() ); ++i )
{
stream << (i > 0? " " : "") << v[i];
}
}
并将其称为:
write_to( cout, find_index(vec2, vec1) );
cout << "\n";
也可以编写一些能够启用cout <<
符号的胶水代码,即可以使用write_to
函数,但这可能只是现在的并发症。 / p>
通过这些更改,您的代码可以编译和输出
0 1 2 3