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

C++11 可以使用std::reverse或任何其他内置方法部分反转向量吗?,c++11,vector,reverse,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)) 向量nums; 对于(int i=0;i

在我的实践程序中,有一个向量,需要部分反转。比如说

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))
向量nums;
对于(int i=0;i<10;i++){nums.push_back(i)}
#我想把它倒过来,有点像这样
标准::反向(nums.位置(3),nums.位置(5))
这应该会使NUM看起来像这样:0143256789。
显然,nums.location()不是真正的方法。

您可以通过使用。迭代器可以被想象为一个专门用于在它来自的容器中移动的对象

std::vector::begin
返回指向向量的第一个元素的迭代器,因此将作为指向向量的第一个元素的指针。要访问它,请取消对迭代器的引用:

要移动到下一个元素,请递增迭代器:

值得注意的是,并非所有迭代器的行为方式都相同,并且可以划分为多个类别。大多数都有自己的功能,受容器限制。这方面的主要示例是
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)
    );

nums.begin()+2的具体功能是什么?我认为nums.begin()是对向量开头的引用。你能把数字加上去吗?@Yadeses是的,你能。但这仅仅是因为它作为一个,这是为了支持这样的添加而设计的。然而,并非所有迭代器都支持加法。有些仅支持增量为1(
++
操作)。给我几分钟,我会在回答中解释更多。您可以使用
std::next
而不是
operator+()
来处理非随机访问迭代器。std::reverse(std::next(nums.begin(),2),std::next(nums.begin(),5));我突然发现了一些事情,也许是我的错误,但当我这样做时,会发生以下情况:123456789转动前5个数字将导致这个结果:5432000@Yadeses将其上传到演示网站上,如,然后重新创建错误
auto iter_to_second_element = ++(v.begin());
auto value_at_second_element = *iter_to_second_element;
// 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)
    );