C++ find in vector
C++ find in vector
我试图做函数,返回在向量中发现的位置。但是我的返回值总是0,我确信有匹配。
代码如下:
int findInItemvector(vector<Item> vec, string name)
{
for(vector<Item>::iterator it = vec.begin(); it < vec.end(); it++)
{
if(it->getName() == name)
{
return it - vec.begin();
break;
}
else
{
return 0;
}
}
}
当您的第一个元素不匹配时,else分支执行return
,这将离开函数并且不执行循环的其余部分。你想要这样的:
int findInItemvector(vector<Item> vec, string name)
{
for(vector<Item>::iterator it = vec.begin(); it < vec.end(); it++)
{
if(it->getName() == name)
{
return it - vec.begin();
}
}
return 0;
}
然而,由于第一项也可以匹配(在这种情况下it - vec.begin() == 0
),我建议您使用其他保护值,例如-1(这永远不会是有效的向量索引)。
你的'else'子句就是问题所在:如果第一个元素不匹配,'else'就会启动,而你的'return 0'语句将跳出'for'循环,而不尝试vector中的任何其他元素。
试着去掉'else',并将'return 0'移动到 for循环结束后的
由于当前的编写方式,您的函数将始终返回0。如果在向量的第一项中找到匹配,那么减法的结果当然是零。如果不匹配,else部分执行并返回0,函数退出。
函数应该是这样的
int findInItemvector(const vector<Item>& vec, string name)
{
for(vector<Item>::const_iterator it = vec.begin(); it < vec.end(); it++)
{
if(it->getName() == name)
{
return it - vec.begin();
}
}
return -1;
}
请注意,我是通过常量引用而不是通过值传递向量,这将防止在调用该函数时生成不必要的向量副本。此外,您应该使用-1而不是0来指示失败,因为如果您要查找的字符串位于vector的第一个元素中,后者是合法的结果。
相关文章:
- std::move a const std::vector in a lambda capture
- find() stl in vector in c++
- typedef vector size_type in header file
- 如何修复c ++中的错误"vector iterators in range are from different containers"?
- 是否有内置函数返回" the number of true value in a boolean vector "?
- std::sort in vector<int> 返回 0 而不是值
- 在函数调用中使用类型vector<pair<int,int>>::iterator&in
- VS2010: assert "vector iterators incompatible" in std::vector.clear()
- 将数据从 std::vector 复制到 Eigen's MatrixXd in C++
- VC++ vector::p ush_back "Access Violation" in DLL
- lower_bound in C++ minus vector
- 加速C++ istream&read_hw(istream&in, vector<double>&hw)
- sorting std::vector in pathfinding
- Deallocating memory in C++ vector<T>
- std::p riority_queue<int, std::vector<int>, std::更大的<int>> in min_heap函数
- std::vector::erase/remove_if resulting in nullptr
- Serilize List<List> <string>in ProtoBuf-net 和 Deserialize as a C++ vector<vector<s
- cin to vector in C++
- Issue in vector
- std::sort for a 2D vector in c++