我的表有一个名为Speed(整数) 的列,我需要选择大于该列表中 25%、50%...值的值。
样本数据:
+-------+
| Speed |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+-------+
Run Code Online (Sandbox Code Playgroud)
期望的输出:
+--------+
| OUTPUT |
+--------+
| 3 |
| 5 |
| 8 |
+--------+
Run Code Online (Sandbox Code Playgroud)
解释:
我认为我应该对数据进行排序,并执行以下操作:
SELECT speed
FROM my_table
WHERE …Run Code Online (Sandbox Code Playgroud) 我正在“现代化”一个(相当古老的)C++ 项目,并在这部分绊倒了:
旧代码为动态数组分配内存,然后根据需要稍后为元素调用构造函数。我猜想为所有元素调用构造函数是很昂贵的,所以作者选择了这种方式(性能对于这个项目来说很关键)。旧代码如下(简化):
struct my_struct {
my_struct(int x, int y, int z) { /* expensive ctor */ }
};
struct other_class {
my_struct* arr;
other_class(int n) {
arr = (my_struct*) malloc(n * sizeof(arr[0]);
}
void foo(int idx, int a, int b, int c) {
new (&arr[idx]) my_struct(a, b, c);
}
};
Run Code Online (Sandbox Code Playgroud)
我改arr到std::vector<my_struct>和使用std::reserve“预约”的记忆。代码工作正常,通过了所有当前测试,但我知道这不行,因为std::reserve不会增加该向量的大小,因此调用arr.size()仍将返回 0。这是我的代码:
struct other_class {
std::vector<my_struct> arr;
other_class(int n) {
arr.reserve(n);
}
void foo(int idx, int a, int b, …Run Code Online (Sandbox Code Playgroud)