我正在尝试将vector<string>::iterator it
初始化为我的向量中的x
位置。由于it=vector.begin();
,我似乎只能将迭代器定位到向量的第一个元素。
如果我希望迭代器从位置x开始工作怎么办?我该怎么移动它?我不希望我的迭代器遍历整个向量,当我已经知道我可以从位置x开始找到我想要的东西。
我尝试将迭代器初始化为it=vector.begin()
,然后使用advance(it,x);
将其移动到x,但它无效。如果我尝试打印*it
,它将不会返回任何值。
我该如何解决这个问题?
答案 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;