在我的练习计划中有一个向量,需要部分逆转。例如,
vector<int> nums;
for(int i = 0; i < 10; i++) {nums.push_back(i)}
#than I would want to reverse it somewhat like this
std::reverse(nums.location(3), nums.location(5))
这应该比这样:n 1 4 3 2 5 6 7 8 9。 显然nums.location()不是一个真正的方法。
答案 0 :(得分:2)
您可以通过I18nQA Encoding Debug Table来完成此操作。可以将迭代器想象成一个专门用于在其容器周围移动的对象。
std::vector::begin
返回一个向量的第一个元素的迭代器,因此它将作为向量的第一个元素的指针。要访问它,您取消引用迭代器:
auto value_at_first_element = *(v.begin());
要移动到下一个元素,您递增迭代器:
auto iter_to_second_element = ++(v.begin());
auto value_at_second_element = *iter_to_second_element;
值得注意的是,并非所有迭代器都以相同的方式运行,并且可以拆分为类别。大多数都有自己的功能受限于其容器的限制。其中的主要示例是std::forward_list
,其迭代器只能通过调用++
运算符向前移动。
研究以下解决问题的方法,并尝试在迭代器上建立一些直觉。迭代器非常强大,是C ++中算法的基石。
// If you know the positions already...
std::reverse(nums.begin() + 2, nums.begin() + 5);
// If you need to _find_ the positions...
std::reverse(
std::find(nums.begin(), nums.end(), 2)
, std::find(nums.begin(), nums.end(), 5)
);