相关疑难解决方法(0)

STL容器函数返回值

在查看STL容器的成员函数时,我发现了一个奇怪的想法.为什么函数std::vector<T>::push_back(T)不具有(可选)返回值(迭代器或甚至对附加对象的引用)?我知道std::string函数inserterase返回迭代器,但这是显而易见的原因.我认为它经常会保存经常跟随这些函数调用的第二行代码.

我敢肯定C++的设计师有很好的理由,请赐教:)

更新:我在这里包含一个真实的代码示例,它可以减少代码长度:

if( m_token != "{" )
{
    m_targets.push_back( unique_ptr<Target>(new Dough(m_token)) );
    return new InnerState( *(m_targets.back()), this );
}
Run Code Online (Sandbox Code Playgroud)

可以减少到

if( m_token != "{" )
    return new InnerState( *(m_targets.push_back( unique_ptr<Target>(new Dough(m_token)) )), this );
Run Code Online (Sandbox Code Playgroud)

如果我假设std::list::push_back返回对添加元素的引用.代码有点重,但由于unique_ptr构造函数和解引用它,这主要是(两组括号).也许为了清晰起见没有任何指针的版本:

if( m_token != "{" )
{
    m_targets.push_back( Dough(m_token) );
    return new InnerState( m_targets.back(), this );
}
Run Code Online (Sandbox Code Playgroud)

if( m_token != "{" )
    return new InnerState( m_targets.push_back( Dough(m_token) ), this );
Run Code Online (Sandbox Code Playgroud)

c++ containers stl return-value

8
推荐指数
2
解决办法
1615
查看次数

标签 统计

c++ ×1

containers ×1

return-value ×1

stl ×1