![]() |
1
8
您可以在一个调用中同时获取两个值(如果它们存在),使用equal_range()。它返回一对std::迭代器,第一个是第一个位置,第二个是最后一个位置,您可以在其中插入传递的值,而不会违反顺序。为了严格满足您的条件,在验证迭代器不等于vector的begin()之后,您必须首先递减迭代器。 |
![]() |
2
8
你可以用STL的下界在几行代码中得到你想要的。下限使用引擎盖下的二进制搜索,因此运行时是O(log n)。
|
![]() |
3
6
您可以简单地使用 binary search ,将在o(log(n))中运行。 这里有一个LUA代码段(我没有时间在C++中做它,抱歉)它做你想要的,除了限制条件(无论如何你没有定义):
它从命令行中获取要搜索的值:
|
![]() |
4
4
我将发表我自己的答案,投票给任何帮助我达成这个结论的人,因为这是我最终要用的,你们都帮助我得出这个结论。欢迎评论。
|
![]() |
5
1
如果(在您的情况下)d小于第一个元素或大于最后一个元素呢?如何处理负值?顺便说一下:保证你的“d”在向量的第一个值和最后一个值之间,你可以这样做:
剩下的是:
足够优雅?: |
![]() |
6
0
你可以在向量中搜索你的值(如果它在向量中的话,它会告诉你值在哪里),然后返回该位置之前和之后的值。因此,搜索45将告诉您它应该在index=1,然后返回0和1(根据搜索的实现,您将得到较小值的索引或较大值的索引,但这很容易用几个边界条件检查)。这应该能够在o(log n)中运行,其中n是向量中的元素数。 |
![]() |
7
0
我会写一些这样的东西,没有测试它是否编译,但是你会得到这样的想法:
|
![]() |
8
0
我写下了这个小函数,它似乎更适合您想要的一般情况。我还没有完全测试过它,但是我写了一些测试代码(包括)。
|
![]() |
9
0
根据tunnuz发布的代码,在绑定检查方面有一些改进:
使用示例:
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |