取消引用无效的引用

时间:2017-03-26 20:22:04

标签: c++ pointers vector reference

我有一个返回向量中位数的函数:

unsigned int Class::Median() const {    
    sort(m_Transactions.begin(), m_Transactions.end(), cmpInt);

    if (m_Transactions.size() != 0) {
        if ( m_Transactions.size()%2 == 0 ) {
            return *m_Transactions[ m_Transactions.size()/2 + 1 ];
        } else {
            return *m_Transactions[ m_Transactions.size()/2 ];
        }
    }

    return 0;
}

向量为vector<unsigned int> m_Transactions。据我所知,[]运算符返回对数组元素的引用。我不想返回引用但是元素。所以我用*取消引用。 Compilator错误说明:invalid type argument of unary '*'...

但是,如果我删除了&#39; *&#39;:

if ( m_Transactions.size()%2 == 0 ) {
    return m_Transactions[ m_Transactions.size()/2 + 1 ];
} else {
    return m_Transactions[ m_Transactions.size()/2 ];
}

由于assignment of read-only location...

,构建失败

其余代码HERE

我该如何解决这个问题?为什么这个解除引用不起作用?

1 个答案:

答案 0 :(得分:1)

您使用* 需要取消引用operator[]索引已经取消引用 std :: vector中的值。

见下文:

更新

std::vector<unsigned int> ret = m_Transactions; // Use auxiliary ret vector to return while maintaining the const in your function signature.
std::sort(ret.begin(), ret.end(), cmpInt);
if (ret.size() != 0) {
    if (ret.size()%2 == 0 ) {
        return ret[ ret.size()/2 + 1 ]; // remove the * dereference operator
    } else {
        return ret[ ret.size()/2 ];  // remove the * dereference operator
    }
}