如何从双向迭代器中减去1

How to substract 1 from bidirectional iterator

本文关键字:迭代器      更新时间:2023-10-16

我有一个迭代器,我不想更改,但我想为该迭代器的值分配另一个迭代器-1,所以
it2 = --it1;是不可能的
问题:
it2 = it1-1;不起作用。

错误:"更大-1"中的"operator-"不匹配c++/4.1.1/bits/sstl_vector.h:182:注意:候选为:ptrdiff_tstd::运算符-(const std::_Bit_iterator_base&,conststd::_Bit_iterator_base&)

ofc我可以做

it2 = --it1;
it1++;

但这太可怕了。

在C++11中,使用标题<iterator>:中的std::prev

it2 = std::prev(it1);

在此之前,你一直在制作一份副本,并将副本提前-1:

it2 = it1;
std::advance(it2, -1);

或:

it2 = it1;
it2--;

你可以这样做:

it2 = it1; 
-- it2;

it1不会被修改。