如何在不进行多次通过(C )的情况下找到最小的所有元素
How to find all elements which are minimal within a range without doing several pass(c++)
我们可以使用算法库中的函数std :: min_element将最小元素在范围内获取。
#include <algorithm>
#include <vector>
std::vector<int> v{3, 1, 4, 1, 5, 9};
std::vector<int>::iterator it = std::min_element(std::begin(v), std::end(v));
迭代器" it"指向向量中的第二个元素。
是否可以获取所有最小元素(此处v [1]和v [3]),而不会在容器上迭代几次?
谢谢
当然是可能的,但不能使用std::min_element
类似的东西:
template<typename ITER>
std::vector<ITER> find_all_min(ITER begin, ITER end){
auto min = *begin;
std::vector<ITER> ret{ begin };
for (++begin; begin != end; ++begin) {
if (*begin < min) {
min = *begin;
ret.clear();
ret.push_back(begin);
} else if (*begin == min) {
ret.push_back(begin);
}
}
return ret;
}
我的示例假设begin < end
。
我们只是在容器上迭代,找到最小元素,记住它是迭代器,然后放在迭代器的向量上。
std::min_element
的复杂性是线性的,这意味着它不会迭代多次。
相关文章:
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 如何在不迭代的情况下对数组中的每个元素调用方法
- 是否可以在不复制的情况下访问undered_map中的元素
- 在给定元素在螺旋上的位置的情况下,在二维数组中查找元素
- 我怎样才能在不重复的情况下随机迭代向量的每个元素
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- 在这种情况下,如何返回对数组中元素的引用?
- 是否可以在不显式迭代每个元素的情况下深度复制指针容器?
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- 在不调用构造函数的情况下创建 Vector 元素
- 在C++中,如何在没有新元素且不单独声明单个元素的情况下创建"std::initializer_list<base *>"?
- 如何在使用和无发现的情况下使用和不使用的字符串向量搜索元素
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 如何在不使用 C++ 函数的情况下显示链表中的元素
- 如何在给定迭代器列表的情况下从向量中删除元素
- 我如何在C 中制作算法,以在不重复的情况下查找集合的变化(即n元素,选择k)
- 如何在不知道大小的情况下编写过程来修改动态数组的元素和大小
- 如何在不修改现有函数的情况下反转数组中除第一个和最后一个元素之外的所有元素