【问题标题】:It's giving me 0 as it should be 5 why is so它给了我 0 应该是 5 为什么会这样
【发布时间】:2021-07-12 07:12:36
【问题描述】:

它给了我 0 应该是 5 为什么会这样。

#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<int> myvector{1, 2, 3, 4, 5};
    auto it = myvector.end();
    cout<<*it;
    return 0;
}

【问题讨论】:

  • end 给你(一个迭代器)最后一个元素,但在最后一个元素之后。
  • 如果您需要一个引用最后一个元素的迭代器,请尝试使用rbegin()
  • *it 取消引用 end() 迭代器,因此行为未定义。只给定一个结束迭代器,通常不可能回到容器的最后一个元素。尝试auto it = std::advance(myvector.begin(), myvector.size() - 1)(只要myvector.size() 不为零——如果为零,则行为未定义)或auto it = myvector.rbegin()(提供不同类型的迭代器)。

标签: c++ arrays vector stl


【解决方案1】:

试试myVector.end() - 1

myVector.end() 正在返回一个迭代器,它指向向量中的末尾元素。

【讨论】:

  • 向量中没有 NULL。 (此外,这是一个 int 的向量,而不是 char)。
  • 那么你应该修正你的答案以避免混淆未来的读者。
  • 从像vector这样的标准容器增加或减少结束迭代器会产生未定义的行为。
【解决方案2】:

对于所有标准容器,您永远不应该取消引用 end() 迭代器,永远不要尝试访问它指向的元素。这是未定义的行为,可能会中止程序。

在旧式循环中,您可以执行以下代码,因为您可以看到迭代器是否具有值 end() 循环将终止。

for (auto it = myvector.begin(), it != myvector.end(), ++it)
   // do something with it

因为你有一个向量,所以用 rbegin() 替换 end() 或者用 back() 直接访问最后一个元素。

【讨论】:

    【解决方案3】:

    如果您想查看“vector”类的最后一个元素,您应该调用back 方法,例如:myvector.back();

    如果您想查看第一个元素,您应该尝试front 方法:myvector.front();

    例如: vector&lt;int&gt; myvector{1, 2, 3, 4, 5};

    myvector.back() 会给5

    并且 myvector.front() 会给1

    要打印出这些值,您无需取消对变量的引用。

    auto lastElement = myvector.back();
    cout << lastElement;
    

    这将打印出数字 5。

    【讨论】:

      【解决方案4】:

      访问 *这是未定义的行为。只有 [begin,end) 可以访问,范围是左闭右开。

      【讨论】:

        【解决方案5】:
        #include <iostream>
        #include <vector>
        int main() {
            vector<int> myvector{ 1, 2, 3, 4, 5 };
            std::cout << myvector[myvector.size()-1];
            return 0;
        }
        

        这样可以获取向量的最后一个元素,当然也可以通过多种不同的方式访问向量的最后一个元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-29
          • 1970-01-01
          • 2019-09-19
          • 2020-05-20
          相关资源
          最近更新 更多