gpt4 book ai didi

c++ - 如何在给定的 vector 索引范围内找到最小元素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:05 27 4
gpt4 key购买 nike

如何为 std::vector 找到给定索引范围内的最小元素?

假设 vector 是

vector<int> v = {1,2,3,4,5};

所以

min_element(v.begin(), v.end());

将给出 1

但是如果我们想要从索引 13 的最小值呢?

v的元素{2,3,4}中,即2

最佳答案

由于 std::min_element[first, last) 范围内运行(从 firstend),我们需要提供:

const auto begin = v.begin() + 1;
const auto end = begin + 3;
int min = *std::min_element(begin, end);

或使用 std::next使其通用(学分@Slava)

auto min = *std::min_element(std::next(v.begin(), 1), std::next(v.begin(), 4));

将其包装在辅助函数中:

template<typename Container, typename Predicate = std::less<>>
auto min_element(
const Container &container,
std::size_t startIdx,
std::size_t endIdx,
const Predicate pred = {}) -> std::decay_t<decltype(*(container.begin()))>
// typename Container::value_type // or simply
{
return *std::min_element(std::next(container.begin(), startIdx),
std::next(container.begin(), ++endIdx), pred);
}

现在主要

std::vector<int> v = { 1, 3, 5, 2, 1 };
const auto startIndex = 1u, endIndex = 3u;
const int min = ::min_element(v, startIndex, endIndex /*, predicate if any*/);

See a live example


但是,请确保给定的迭代器有效,否则行为是 UB。

关于c++ - 如何在给定的 vector 索引范围内找到最小元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com