【问题标题】:Problems with iterators [closed]迭代器的问题[关闭]
【发布时间】:2019-08-09 14:42:52
【问题描述】:
void Reverse(vector<int> v)
{
    vector<int>::iterator itr1 = v.begin();
    vector<int>::reverse_iterator itr2 = v.rbegin();
    while(true)
    {
        swap(*itr1,*itr2);
        itr1++;
        if(itr1 == itr2.base() - 1) break;
        itr2++;
    }
}

函数应该反转向量,但它不起作用。 谁能解释一下为什么?

【问题讨论】:

  • “不工作”不是问题描述。
  • 阅读您最喜欢的 C++ 书籍中的值传递和引用传递。
  • 您正在将副本传递给函数。另外,std::reverse?
  • 可能是因为你传递了向量v按值
  • if(itr1 == itr2.base() - 1) break; 不是一个安全的结束条件。它会丢失所有偶数或所有奇数大小的向量,并导致未定义的行为。您也不能将空向量传递给它。

标签: c++


【解决方案1】:

它反转本地副本。你可能想要

void Reverse(vector<int>& v)

std::reverse

【讨论】:

  • 它还在中途测试两个迭代器的相等性。这仅适用于奇数大小的向量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2016-10-25
  • 1970-01-01
  • 2016-01-10
  • 2020-05-19
  • 1970-01-01
  • 2012-07-18
相关资源
最近更新 更多