小编Amo*_*mos的帖子

如何为所有现有错误实现错误包装?

我想在所有函数中使用我自定义的错误类型,我需要包装现有的标准错误,以便?操作员成功.

这是我在做的事情:

use std::{error::Error, fmt, fs};

#[derive(Debug)]
enum MyError {
    A,
    B,
}

impl fmt::Display for MyError {
    fn fmt(&self, _f: &mut fmt::Formatter) -> fmt::Result {
        Ok(())
    }
}

impl Error for MyError {
    fn description(&self) -> &str {
        ""
    }
}

trait NotMyError {}

impl<T: NotMyError + Error> From<T> for MyError {
    fn from(_: T) -> MyError {
        MyError::A
    }
}

fn test() -> Result<(), MyError> {
    fs::read_dir("test")?;
    Ok(())
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:

error[E0277]: the trait …
Run Code Online (Sandbox Code Playgroud)

rust

13
推荐指数
1
解决办法
3083
查看次数

如何找到最长约束的子序列

给定一个包含N个不同整数的数组,找到满足以下条件的最长子序列:

  1. 子序列的start元素是子序列中最小的.
  2. 子序列的结束元素是子序列中最大的元素.

例如:8,1,9,4,7.答案是1,4,7.

2,6,5,4,9,8.答案是2,6,5,4,9或2,6,5,4,8.

这是一个O(N^2)算法:

  • 让我们X成为一组数字.
  • 迭代X.假设我们在索引i.让Y是阵列,其中Y [j]为在元件的数量(j, i],其比X [j]的小.让z是元件的数量在[j, i]其比X [I]小.如果X [j]小于X [i],我们可以得到满足约束的长度为zY [j]的子序列.
  • 设置z1.循环ji-1下到0.

    if X[j] < X[i]: z++; ans = max(ans, z - Y[j]); else Y[j]++;

我们可以做得更好吗?我认为应该有一个O(NlogN)算法来找到最大长度.

arrays algorithm subsequence

6
推荐指数
1
解决办法
274
查看次数

Rust的功能编程是零成本吗?

我在Rust中对函数式编程性能进行了一些测试:

extern crate rand; // 0.5.5

use rand::Rng;

fn time(f: impl FnOnce()) -> std::time::Duration {
    let s = std::time::Instant::now();
    f();
    s.elapsed()
}

fn main() {
    let iteration = 10000000;

    let mut rng = rand::thread_rng();
    println!(
        "while: {:?}",
        time(|| {
            let mut i = 0;
            let mut num = 0i64;
            while i < iteration {
                num += rng.gen::<i64>();
                i += 1;
            }
        })
    ); // 29.116528ms

    println!(
        "for: {:?}",
        time(|| {
            let mut num = 0i64;
            for _ in 0..iteration { …
Run Code Online (Sandbox Code Playgroud)

functional-programming rust

6
推荐指数
1
解决办法
1157
查看次数

一个"分而治之"的算法分配

现在我有N个不同的整数,我需要找到一个具有最多数字的区间,其值在O(NlogN)时间内的区间的端点之间.我称之为"分而治之"的问题,因为它是我期末考试中的"分而治之"类别.我已经考虑了两个星期并做了很多实验,没有一个是正确的(与蛮力算法相比).有人能帮助我吗?

例子:

8,1,3,4,7.答案是1-7.

2,6,5,4,9,8.答案是2-9或2-8.

我认为"间隔"这个词并不代表我的意思.我的意思是找到数组最多的子序列,其值在子序列的端点之间.例1:"1,3,4,7"有两个数字(3,4),例如2:"2,6,5,4,9"和"2,6,5,4,9" ,8"有三个数字(6,5,4).

这是我的代码(O(n ^ 2)).@Vaughn Cato我用它来比较你的代码.

#! /usr/bin/env python
#coding=utf-8
import itertools
def n2(numbers):
  a = [0]*len(numbers)
  ans = -1
  l = 0
  r = 0
  for j in range(1,len(numbers)):
    t = 0
      for i in range(j-1,-1,-1):
        if numbers[i]<numbers[j]:
          x = t - a[i]
          if x>ans:
            ans = x
            l = i
            r = j
          t += 1
        else:
          a[i] += 1
  return (numbers[l],numbers[r],ans)

def countBetween(numbers,left,right):
  cnt = 0
  for i in range(left+1,right):
    if numbers[left]<numbers[i]<numbers[right]:
      cnt …
Run Code Online (Sandbox Code Playgroud)

algorithm divide-and-conquer

5
推荐指数
1
解决办法
1563
查看次数

替换 clickhouse 中的 row_number()

clickhouse数据库不支持Row_number(),寻找替代函数。

SELECT company_name AS company,
       DOMAIN,
       city_name AS city,
       state_province_code AS state,
       country_code AS country,
       location_revenue AS revenueRange,
       location_TI_industry AS industry,
       location_employeecount_range AS employeeSize,
       topic,
       location_duns AS duns,
       rank AS intensityRank,
       dnb_status_code AS locationStatus,
       rank_delta AS intensityRankDelta,
       company_id,
       ROW_NUMBER() OVER (PARTITION BY DOMAIN) AS rowNumberFROM company_intent c
 WHERE c.rank > 0
   AND c.rank <= 10
   AND c.signal_count > 0
   AND c.topic IN ('Cloud Computing')
   AND c.country_code = 'US'
   AND c.rank IN (7, 8, 9, 10)
 GROUP BY c.location_duns,
          company_name,
          DOMAIN, …
Run Code Online (Sandbox Code Playgroud)

sql yandex clickhouse

5
推荐指数
2
解决办法
8339
查看次数

用c ++命名的vptr名称?

即使有很多关于如何在c ++中处理虚函数的文章,我也无法清楚一个基本的疑问.派生类的vptr变量是否被基类变量覆盖.ptr varible的名字也被破坏了吗?

Class Base
{
public:
    virtual void test();
};

class Derived 
{
public:
     virtual void test();
};
Run Code Online (Sandbox Code Playgroud)

如果我打电话

Base b = new Derived();
b->test();
Run Code Online (Sandbox Code Playgroud)

它转变为

(*b->vptr[<index>])(b);
Run Code Online (Sandbox Code Playgroud)

索引指向vtable条目.

我怀疑这个vptr是否也被命名为?

c++ virtual-functions

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