我有一个返回向量中位数的函数:
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。
我该如何解决这个问题?为什么这个解除引用不起作用?
答案 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
}
}