小编Rem*_*i.b的帖子

Bash:在数字字符串中格式化数字

我是一个bash新手.我想数字1呼应xn数字格式.例如,让我们考虑n=3:5应该变为005,13应该变为013,110应该保持110.

实现这一目标的一种方法是使用这种结构:

for i in $(seq 1 120)
do
   if [ "$i" -lt "10" ]
   then
      echo "00$i"
   elif [ "$i" -gt "99" ]
   then
      echo "$i"
   else
      echo "0$i"
   fi
done
Run Code Online (Sandbox Code Playgroud)

但它非常难看,并且在改变n(位数)的值时实际上并不灵活.我宁愿有一个只用n数字格式化的函数?是否已经内置了功能?如果没有,你可以帮我创建这样的功能吗?

bash string-formatting

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

如何在执行`+`=`-`后"回滚"?

主要问题

我做到了

> `+` = `-`
> 5 + 2
[1] 3
Run Code Online (Sandbox Code Playgroud)

如何在不重新启动控制台的情况下"回滚"?干

> `+` = sum
Run Code Online (Sandbox Code Playgroud)

当然,恢复一个+但不是全部的功能.例如

> c(3,4) + c(1,2)
[1] 10
Run Code Online (Sandbox Code Playgroud)

我怎样才能恢复其他功能+呢?

额外的相关问题

这种"任务"或"+"和" - "代表的功能是否有名称?

可以使用哪些术语来区分函数"+"和可以创建的函数"%+%"

`%+%` = function(x,y){print(paste(x,"+",y,"=",x+y))}
Run Code Online (Sandbox Code Playgroud)

r function

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

附加分配新值的函数

我试图创建一个Append不返回值但直接扩展第一个变量的函数.目前,要追加yx我做的

x = append(x,y)
Run Code Online (Sandbox Code Playgroud)

我希望能够做到

Append(x,y)
Run Code Online (Sandbox Code Playgroud)

并得到相同的结果.我首先想到的是类似的东西

Append = function(a,b,VarName) assign(VarName,append(a,b), envir = .GlobalEnv)
Append(x,y,"x")
Run Code Online (Sandbox Code Playgroud)

它有效,但必须传递原始变量的名称是非常不满意的.有更好的解决方案吗?

arrays r

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

为什么这个简单的cpp函数版本更慢?

考虑这种比较:

require(Rcpp)
require(microbenchmark)

cppFunction('int cppFun (int x) {return x;}')
RFun = function(x) x

x=as.integer(2)
microbenchmark(RFun=RFun(x),cppFun=cppFun(x),times=1e5)

Unit: nanoseconds
   expr  min   lq      mean median   uq      max neval cld
   RFun  302  357  470.2047    449  513   110152 1e+06  a 
 cppFun 2330 2598 4045.0059   2729 2879 68752603 1e+06   b
Run Code Online (Sandbox Code Playgroud)

cppFun似乎慢了RFun.为什么会这样?调用函数的时间有所不同吗?或者是运行时间不同的功能本身?是传递和返回参数的时间吗?是否有一些数据转换或数据复制我不知道何时将数据传递给(或从中返回)cppFun

performance benchmarking r function rcpp

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

通过未排序的列表改进搜索

我的代码花了40%的时间来搜索未分类的向量.更具体地,搜索功能my_search重复地接收单个未分类的长度矢量N,其中N可以取10到100,000之间的任何值.与每个元素相关联的权重具有相对小的方差(例如[0.8,0.81,0.85,0.78,0.8,0.7,0.84,0.82,...]).

该算法my_search首先对每个对象的所有权重求和,然后N用替换样本计算元素的平均值(与向量的长度一样多).该算法非常类似于

int sum_of_weight = 0;
for(int i=0; i<num_choices; i++) {
   sum_of_weight += choice_weight[i];
}
int rnd = random(sum_of_weight);
for(int i=0; i<num_choices; i++) {
  if(rnd < choice_weight[i])
    return i;
  rnd -= choice_weight[i];
}
Run Code Online (Sandbox Code Playgroud)

这篇文章.

我可以在搜索之前对矢量进行排序,但是需要O(N log N)的顺序(取决于所使用的排序算法)并且我怀疑(但可能是错误的,因为我没有尝试过)我会获得很多时间特别是因为权重几乎没有变化.

另一种解决方案是存储在一系列点之前有多少重量的信息.例如,在对矢量求和时,每N/10个元素,我可以存储已经总和了多少权重的信息.然后,我可以首先与rnd这10个断点进行比较,并仅搜索向量总长度的十分之一.

  • 这会是一个很好的解决方案吗?
  • 我描述的流程有名称吗?
  • 如何根据函数估计要存储的正确断点数N
  • 有更好的解决方案吗?

c++ sorting algorithm search

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

无法在lambda中捕获

这是一个可重现的代码

#include <iostream>
#include <vector>
#include <algorithm>

class X
{
public:
 int a; 
  X(int b)
  : a(b)
  {}
};

int main()
{
  // Build the vector 'v'
  std::vector<X> v;
  X x1(7);
  v.push_back(x1);
  X x2(11);
  v.push_back(x2);
  X x3(16);
  v.push_back(x3);
  X x4(20);
  v.push_back(x4);
  X x5(22);
  v.push_back(x5);
  X x6(31);
  v.push_back(x6);
  X x7(38);
  v.push_back(x7);

  // Search if there is an element of 'v' which attribute 'a' equals 18
  int y(18); 
  if (
    std::find(
        v.begin(),
        v.end(),
        [&](const X& o){return o.a == y;}
      ) == v.end() …
Run Code Online (Sandbox Code Playgroud)

c++ lambda compiler-errors compilation c++14

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

如何在编译时评估Primitive vs Class模板?

当我们做...

template <typename T>
void foo(T x)
{
   if (is_fundamental<T>::value)
   {
       ...
   } else
   {
     ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我认为if声明(以及is_fundamental<T>::value)在运行时进行评估,是吗?

如果是,是否有办法在编译时进行此评估?我希望有类似......

template <primitive_typename T>
void foo(T x)
{
   ...
}


template <noPrimitive_typename T>
void foo(T x)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

一种解决方案是重载每种可能的原始类型,但它并不是一个令人满意的解决方案,因为它需要多次复制基本类型的代码.有没有办法用一个类型名称来引用所有原语?

c++ templates class primitive-types c++11

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

使用类标记调度

这是一个标签调度的简单示例

template <typename T>
void foo(T x, std::true_type)
{
    std::cout << "A primitive type\n";
}

template <typename T>
void foo(T x, std::false_type)
{
    std::cout << "Not a primitive type\n";
}

template <typename T>
void foo(T x) {
    foo(x, std::is_fundamental<T>{});
}

int main()
{
    int a = 3;
    std::vector<int> v = {1,2,3};
    foo(a);
    foo(v);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想做类似但涉及课程的事情.就像是

template <typename T, std::true_type>
class C
{
public: 
    T x;
    void foo()
    {
        std::cout << "A primitive type\n";
    }

    C(T i):x(i){};
};

template …
Run Code Online (Sandbox Code Playgroud)

c++ templates primitive-types c++11

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

将字符串作为参数传递时正在复制什么?

在 Golang 中,一切都是按值传递的。如果我“直接”传递一个数组(而不是通过指针传递它),那么在函数中所做的任何修改都将在函数外部找到

func f(a []int) {
    a[0] = 10
}
func main() {
    a := []int{2,3,4}
    f(a)
    fmt.Println(a)
}

Output: [10 3 4]
Run Code Online (Sandbox Code Playgroud)

这是因为,据我了解,数组(除其他外)构成了指向底层数据数组的指针。

除非我弄错了(请参阅此处),字符串还构成(与“len”对象一起)unsafe.Pointer指向基础数据的指针(a)。因此,我期待与上面相同的行为,但显然,我错了。

func f(s string) {
    s = "bar"
}
func main() {
    s := "foo"
    f(s)
    fmt.Println(s)
}

Output: "foo"
Run Code Online (Sandbox Code Playgroud)

字符串发生了什么?当字符串作为参数传递时,似乎正在复制基础数据。

相关问题:当​​我们不希望我们的函数修改字符串时,出于性能原因是否仍然建议通过指针传递大字符串?

string pointers copy immutability go

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