【发布时间】:2017-09-15 19:51:11
【问题描述】:
我正在尝试编写一个从 STL 容器返回一对值的函数。
template <typename T>
std::pair<typename T::value_type,typename T::value_type> getMinMax(T &container) {
auto min = *(container.begin());
auto max = *(container.begin());
for (auto it : container) {
if (min > (*it) ) {
min = (*it);
}
if (max < (*it) ) {
max = (*it);
}
}
return std::make_pair(min, max);
};
int main() {
std::vector<int> c{1, 2, 3, 4, 5};
auto p = getMinMax(c);
std::cout << "min: " << p.first << " max: " << p.second << "\n";
}
我收到一个错误:
错误:间接需要指针操作数('int' 无效) 如果 (min > (*it) ) {我不知道该怎么处理。
除了这个错误,还有更好的方法来实现所需的行为吗?
【问题讨论】:
-
有没有更好的方法来实现所需的行为?。是的,
std::minmax_element -
@user1211030 在此代码中 sn-p for (auto it : container) { if (min > (*it) ) { min = (*it); } 它不是迭代器或指针。它具有值类型。所以删除取消引用。
-
for range 返回元素,而不是迭代器
-
@user1211030 通常该函数具有未定义的行为,因为容器可以是空的。:)
标签: c++ algorithm c++11 templates std-pair