将迭代器初始化为向量中的位置

时间:2015-09-03 14:01:45

标签: c++ vector iterator

我正在尝试将vector<string>::iterator it初始化为我的向量中的x位置。由于it=vector.begin();,我似乎只能将迭代器定位到向量的第一个元素。

如果我希望迭代器从位置x开始工作怎么办?我该怎么移动它?我不希望我的迭代器遍历整个向量,当我已经知道我可以从位置x开始找到我想要的东西。

我尝试将迭代器初始化为it=vector.begin(),然后使用advance(it,x);将其移动到x,但它无效。如果我尝试打印*it,它将不会返回任何值。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

A <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_view_contact" app:showAsAction="always|withText" android:icon="@drawable/ic_action_person" android:title="@string/action_view_contact" /> <item android:id="@+id/action_save_contact" app:showAsAction="always|withText" android:icon="@drawable/ic_action_add_person" android:title="@string/action_save_contact" /> <item android:id="@+id/action_change_notification" app:showAsAction="never|withText" android:title="@string/action_turn_off_notifications" /> 支持随机访问迭代器,这意味着您可以直接将指定的数量添加到迭代器,例如

std::vector

无论如何auto it = vector.begin() + 4; 肯定会有效:

std::advance

如果你不想修改现有的迭代器,还要auto it = vector.begin(); std::advance(it, 4);

std::next

答案 1 :(得分:0)

如果您知道确切的位置,可以使用it + x。其他方法是在您撰写问题时使用advance()。以下does work

std::vector<int> a{10,20,30,40};
auto it1 = a.begin() + 2;
auto it2 = a.begin();
advance(it2, 2);
cout << *it1 << " " << *it2;