我需要一个函数,它接受一个向量(假定为已排序)和一个值,并返回[edit] 大于小于或等于该数字的最接近的数字,最好使用STL中的算法.我已经提出了使用std :: lower_bound()的解决方案,但它看起来像kludgy和丑陋:
struct ClosestCmp {
bool operator()(const int & x, const int & y) { return x > y; }
};
// vec is assumed to be sorted
int closest(const std::vector<int> & vec, int value)
{
std::vector<int>::const_reverse_iterator cri =
std::lower_bound(vec.rbegin(), vec.rend(), value, ClosestCmp());
if (cri != vec.rend()) {
return *cri;
}
return -1;
}
// ...
vec.push_back(1);
vec.push_back(2);
vec.push_back(4);
vec.push_back(5);
std::cout << closest(vec, 2) << "\n"; // Should ouput "2"
std::cout << closest(vec, 3) << "\n"; // …Run Code Online (Sandbox Code Playgroud) 请使用以下代码段:
func main() {
ch := make(chan int)
quit := make(chan int)
go func() {
for {
ch <- querySomePeriodicThing()
}
}()
// ...
loop:
for {
select {
case <-ch: handlePeriodicThing()
case <-quit: break loop
}
}
}
Run Code Online (Sandbox Code Playgroud)
goroutine应该在执行期间运行.当select语句从退出通道接收到某些内容时,它会跳出循环并且程序结束,而不会尝试停止goroutine.
我的问题:这会产生一次或两次不明显的间歇性不良反应吗?我知道在其他语言中,线程应该在程序结束之前清理(即退出),但是会有所不同吗?假设querySomePeriodicThing()不会打开文件描述符或套接字或任何不好的东西.
考虑以下 Java 类:
package javapkg;
public class JavaClass {
private interface JavaInterface {
void foo();
}
public void bar(JavaInterface ji) {
ji.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
使用此类的内部接口进行 SAM 转换的 Kotlin 代码(请注意,KotlinClass位于不同的包中):
package kotlinpkg
import javapkg.JavaClass
class KotlinClass {
fun f() {
val jc = JavaClass()
// Does not compile:
// "Cannot access 'JavaInterface': it is private in 'JavaClass'"
jc.bar(object : JavaClass.JavaInterface{
override fun foo() { }
})
// Compiles and runs fine on Android Nougat, but throws
// a NoClassDefFoundError …Run Code Online (Sandbox Code Playgroud)