C++ 从共享指针向量字符串返回值

C++ 从共享指针向量字符串返回值,c++,c++11,vector,shared-ptr,C++,C++11,Vector,Shared Ptr,我正在尝试为我想要使用智能指针的类实现一个返回方法。我有: std::shared_ptr<std::vector<std::string>> data; 如何使用共享的\u ptr访问值?我认为是这样的: std::string& rear() { assert(data.get() != 0 && !data->empty()); return *(*data).rbegin(); }; *数据是一个向量 (*dat

我正在尝试为我想要使用智能指针的类实现一个返回方法。我有:

std::shared_ptr<std::vector<std::string>> data;

如何使用共享的\u ptr访问值?

我认为是这样的:

std::string& rear()
{
    assert(data.get() != 0 && !data->empty());
    return *(*data).rbegin();
};
  • *数据
    是一个向量
  • (*data).rbegin()返回指向最后一个元素的反向迭代器
  • *(*data).rbegin()取消对迭代器的引用,获取其值(引用)

只需在取消引用指针后返回数组中的最后一个元素。成员函数将返回向量末尾的元素,该元素也是最后一个元素

值得注意的是,智能指针是指针包装器,它通常支持在C指针上执行的操作,包括取消引用
*
和通过取消引用
->
访问成员

std::string& rear()
{
    if (data && ! data.empty ())
        return data->back();
    else
        // Your Error Handling Should Go Here
        ;
};

返回数据->at(数据->大小()-1);在卷筒中,这是正确的方法吗?有任何原因,你有代码> STD::SysDypPTR< /Cord>:STD::SysDypTR,因为我想用C++ 11种方式来实现我的类,因为它更安全,<代码> STD::vector < /Cord>已经安全(在自动内存管理方面)。如果将它包装在
std::shared\u ptr
中,您不会得到任何额外的好处;最近我一直在使用std::string,我忘记了std::vector有一个back()成员函数:)使用Abhijit解决方案imo,它更简单更清晰:)我认为应该是if(data.get()&&…)@rozina:我认为这可能不是必需的,因为检查应该调用get成员函数。如果大小() > 0 check@rozina您不需要
get
来检查指针的有效性。
std::string& rear()
{
    if (data && ! data.empty ())
        return data->back();
    else
        // Your Error Handling Should Go Here
        ;
};