你可以部分使用std :: reverse或任何其他内置方法来反转向量吗?

时间:2016-01-08 16:21:56

标签: c++11 vector reverse

在我的练习计划中有一个向量,需要部分逆转。例如,

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()不是一个真正的方法。

1 个答案:

答案 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)
    );

iterators