从 std::vector 中获取最后一个元素

Get the last element from a std::vector

在下面的示例中,我想从向量中获取一个元素。但是我不明白错误:

#include <vector>
#include <memory>


using namespace std;

class Foo{
    virtual int end() = 0;
};

class Bar : public Foo{
    int end(){
        return 0;
    }
};


int main(){
    vector<shared_ptr<Foo>> a;
    a.push_back(make_shared<Bar>());
    shared_ptr<Foo> b = a.pop_back();
}

此处错误:

 g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:21:35: error: conversion from ‘void’ to non-scalar type ‘std::shared_ptr<Foo>’ requested
   21 |     shared_ptr<Foo> b = a.pop_back();
      |                         ~~~~~~~~~~^~

这确实令人费解。正如 kiner_shah 在他的评论中所说。您不想使用 pop_back

int main(){
    vector<shared_ptr<Foo>> a;
    a.push_back(make_shared<Bar>());
    shared_ptr<Foo> b = a.back();
}

pop_back 方法没有 return 任何东西。

找到 std::vector -
的最后一个元素 back() - 访问最后一个元素

int main(){
vector<shared_ptr<Foo>> a;
a.push_back(make_shared<Bar>());
shared_ptr<Foo> b = a.back();}

不要使用 a.pop_back() 它用于删除 std::vector 中的最后一个元素。