小编Tar*_*ron的帖子

为什么将nullptr返回为std :: string时不是编译时错误?

由于存在一个错误,我刚刚发现该代码可以在Visual Studio 17以及其他编译器上正常编译。现在我很好奇为什么?

#include <iostream>
#include <string>

std::string foo(){
    return nullptr;
}

int main(){
    auto s = foo();
    std::cout << s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我可以想象这是因为std::basic_string可以用a调用c'tor char*,同时返回从ptr到的隐式转换std::string(使用NULLas作为参数,然后变为poof)。我走对了吗?

c++ function stdstring language-lawyer

24
推荐指数
2
解决办法
1716
查看次数

是否可以在内存开销不变的情况下重新排列数组?

在阅读一些StackOverflow问题时,我偶然发现了这个问题,但是找不到令人满意的答案。

假设我们有一个array Alength ,以随机方式n包含其索引,从0n-1。是否可以重新排列数组,使其结果A[ A[i] ]具有恒定的O(1)内存开销?

例:

A = [ 3, 2, 0, 1 ]
rearrange( A )
A = [ 1, 0, 3, 2 ]
Run Code Online (Sandbox Code Playgroud)

如果可能,该算法的概述将是不错的选择。否则,解释为什么这是不可能的。由于就地排序是一件很重要的事情,因此可能类似。

澄清:如果您没有内存限制,该算法很简单:

A = [ 3, 2, 0, 1 ]
A_r = Array_of_size( A )
for i = 0 to Arraysize - 1
   A_r[ i ] = A[ A[i] ]
Run Code Online (Sandbox Code Playgroud)

结果 A_r = [ 1, 0, 3, 2]

arrays algorithm in-place

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

在不调用代理的情况下跳过詹金斯管道中的一个阶段?

我们将jenkins管道dsl用于我们的职位描述。现在我们有了这样的东西:

pipeline {
  agent none 

  options {
    timestamps() 
  }

  environment { 
    //SOME ENV VARS
  }

  stages {
    // more stages
    stage('stage1'){
    when {
         expression { env.BRANCH_NAME == 'master' }
         }
    agent { label 'slave1' }
    steps{
       //doing stuff
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

构建过程中的一个阶段仅应在构建master分支时运行,您可以考虑部署作业或朝该方向进行的工作。问题是,我们带有特定标签的代理商资源有限。当我们建立其他分支时,该作业仍会调用slave1代理,然后在检查该分支不是主节点之后跳过该阶段。这很不好,因为当所有slave1代理都在处理master分支作业时,其他作业将不得不等待slave1代理可用,以检查它是否确实需要运行该阶段。

jenkins管道DSL是否有任何方法可以跳过该阶段而无需等待slave1代理确定分支?

jenkins jenkins-slave jenkins-pipeline

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