如何识别vector迭代器是否到达vector的末端
How to identify if vector iterator has reached end of vector?
我有一个整数向量,我想让迭代器指向我想要的数字(称之为'test')。
vector<int> vec;
void find(std::vector<int>::iterator iter, int test)
{
if((*iter)!=test){ ++iter;}
}
这有时是有问题的,因为iter可能会碰到向量的末尾(如果'test'不在向量中),我会遇到一个错误。
我是否可以执行类似
的操作?if(iter!=vec.end())
和停止迭代没有指定我的向量在函数?谢谢你!
可以采用标准库方法,向函数传递一对迭代器:
template <typename Iterator>
void foo(Iterator begin, Iterator end,
typename std::iterator_traits<Iterator>::value_type test)
{
Iterator it = begin;
....
if (iterator != end) { ... }
}
那么你必须想出一个算法来找到指向值等于test
的元素的迭代器。或者直接调用std::find
并删除您的函数。
auto it = std::find(vec.begin(), vec.end(), test);
if (it != vec.end()) { .... }
一个对的想法:
- 通过 传递迭代器
- 标准库通常通过传递开始-结束对来工作,因此您可以根据需要调整范围
我会选择像
这样的字体vector<int> vec;
void find(std::vector<int>::iterator& iter, std::vector<int>::iterator end, int test)
{
while (iter != end) {
if (*iter == test)
return;
++iter;
}
}
int main()
{
vector<int> a = { 2,3,4 };
std::vector<int>::iterator it = a.begin();
find(it, a.end(), 5);
}
无论如何,你可以使用std::find
(http://en.cppreference.com/w/cpp/algorithm/find)
使用标准算法std::find, from <algorithm>
auto it = std::find(vector.begin(), vector.end(), value);
是,存在vec.end()。你可以查看这个参考资料http://www.cplusplus.com/reference/vector/vector/end/
相关文章:
- std::vector::迭代器是否可以合法地作为指针
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- vector是否为std::移动的对象连续分配内存
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- std::vector::assign/std::vector::operator=(const&) 是否保证在"this"中重用缓冲区?
- std::vector 是否有用于引用的复制构造函数?
- 递减 std::vector::begin 是否未定义,即使它从未被使用过?
- 如何判断 std::vector 是否调整了自身大小,以及如何解释指向向量内值的指针不再有效
- std::find on empty vector 是否会导致未定义的行为
- 使用具有不同整数类型的 std::vector 是否始终安全<size_t>?
- std::vector是否适合频繁调整大小
- 如何检查两个 std::vector 是否只包含相同的元素?
- vector是否调用指向对象的指针的析构函数
- 使用 std::vector<T*> 是否不如 std::vector<shared_ptr<T>> 安全?
- 在c++中,一个vector是否占用连续的内存槽?
- 我的std::vector是否包含指针或结构体?
- 如果分配器提供realloc语义,std::vector是否可以避免复制
- std::vector是否有{Initial number of elements}构造函数
- std::vector<T> 是否只容纳它需要的确切数量的元素或额外的空间?