小编Sco*_*rta的帖子

如何使用 SQL 从列中获取 >= 25%、50%、75% 的值

我的表有一个名为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)

解释:

  • 列表中 3 >= 25% 的数字
  • 列表中 5 >= 50% 的数字
  • 列表中 8 >= 75% 的数字

我认为我应该对数据进行排序,并执行以下操作:

SELECT speed 
FROM my_table
WHERE …
Run Code Online (Sandbox Code Playgroud)

sql select where-clause clickhouse

2
推荐指数
1
解决办法
3353
查看次数

如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?

我正在“现代化”一个(相当古老的)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)

我改arrstd::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)

c++ constructor memory-management stl vector

2
推荐指数
1
解决办法
100
查看次数