【发布时间】:2017-03-26 20:22:03
【问题描述】:
我有一个返回向量中位数的函数:
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。据我了解,[] 运算符返回对数组中元素的引用。我不想返回引用,而是返回元素。所以我取消引用*。编译器错误状态:invalid type argument of unary '*'...。
但是,如果我删除“*”:
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。
我该如何解决这个问题?为什么取消引用不起作用?
【问题讨论】:
-
您不能取消引用引用,除非它是对指针的引用。只需使用 [] 运算符返回的内容,就好像它是一个值一样。并阅读一本好的 C++ 教科书。
-
你第一次返回可能会报错:if size == 2, size / 2 + 1 = 2
-
从函数中删除
const,看看是否有效...... -
删除
const解决了这个问题,非常感谢。但是,由于分配,const必须在那里。 -
那么,您必须将
m_transactions复制到一个新变量中,然后对该变量进行排序并从中获取中位数,因为排序会修改它所排序的内容。
标签: c++ pointers vector reference