小编Fab*_*ien的帖子

在c ++ 11中,如何在向量上调用std :: max?

我有一个vector<data>(data我自己的宠物类型),我想找到它的最大价值.

std::maxC++ 11中的标准函数似乎适用于对象集合,但它需要初始化列表作为其第一个参数,而不是像vector以下集合:

vector<data> vd;
std::max(vd); // Compilation error
std::max({vd[0], vd[1], vd[2]}); // Works, but not ok since I don't vd.size() at compile time
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

c++ std initializer-list c++11

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

有没有办法在Go中的构建时定义常量?

我在Go中有一个程序,我希望在一堆二进制文件中编译,每个二进制文件都有const不同的值.更清楚的是,我有类似的东西:

const wordLen = 6
type knowledge [wordLen]byte
Run Code Online (Sandbox Code Playgroud)

这里,wordLen与值6相关联,但我希望有不同的二进制文件,值为5到10.我可以使它成为变量,然后使用切片而不是数组,但这会产生巨大的性能影响在我的软(是的,我试过).

我希望在go build参数上有一些构建标记,以指示wordLen给定二进制文件的值是什么.那么,(尽可能惯用)的方式是什么呢?

const go build-time

7
推荐指数
2
解决办法
1803
查看次数

在Nimrod中,按位运算的语法是什么?

我刚刚发现了Nimrod并且有一个基本问题(在文档中找不到答案).

你如何使用按位运算?我有以下代码,其中x被定义为int:

if x and 1:
Run Code Online (Sandbox Code Playgroud)

这不编译:

Error: type mismatch: got (range 0..1(int)) but expected 'bool'
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

if and(x, 1)
Run Code Online (Sandbox Code Playgroud)

我明白了

Error: type mismatch: got (tuple[int, int])
but expected one of:  
system.and(x: int16, y: int16): int16
system.and(x: int64, y: int64): int64
system.and(x: int32, y: int32): int32
system.and(x: int, y: int): int
system.and(x: bool, y: bool): bool
system.and(x: int8, y: int8): int8
Run Code Online (Sandbox Code Playgroud)

有什么诀窍?

bitwise-operators nimrod nim-lang

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

什么是同步goroutines的首选方式

我有一个昂贵的功能,我应用于切片的所有项目.我正在使用goroutines来处理它,每个goroutine处理切片的一个项目.

func Huge(lst []foo) {
  for _, item := range lst {
     go performSlow(item)
  }

  // How do I synchronize here ?
  return someValue(lst)
}
Run Code Online (Sandbox Code Playgroud)

问题是,如评论所示,在调用someValue函数之前,等待所有goroutine完成工作的首选方法是什么?传递一个频道performSlow并等到每个人都写到它的工作,但它似乎有点过分:

func Huge(lst []foo) {
  ch := make(chan bool)

  for _, item := range lst {
     go performSlow(item, ch)  // performSlow does its job, then writes a dummy value to ch
  }

  for i := range lst {
     _ = <-ch
  }

  return someValue(lst)
}
Run Code Online (Sandbox Code Playgroud)

是否有更好的(即更有效和/或更惯用)的方式来做到这一点?

synchronization go goroutine

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

在Go中,如何自动将循环索引强制转换为uint?

我有几个函数uint作为他们的输入:

func foo(arg uint) {...}
func bar(arg uint) {...}
func baz(arg uint) {...}
Run Code Online (Sandbox Code Playgroud)

我有一个循环,其限制都是常uint量值

const (
    Low = 10
    High = 20
)
Run Code Online (Sandbox Code Playgroud)

在接下来的循环中,我怎么能说我想i成为一个uint?编译器抱怨它是一个int.

for i := Low; i <= High; i++ {
    foo(i)
    bar(i)
    baz(i)
}
Run Code Online (Sandbox Code Playgroud)

我真的不想调用uint(i)每个函数调用,并且执行以下操作是正确的,但让我觉得很脏:

var i uint

for i = Low; i <= High; i++ {
    foo(i)
    bar(i)
    baz(i)
}
Run Code Online (Sandbox Code Playgroud)

go

4
推荐指数
2
解决办法
140
查看次数

如何在go中的几行上链接命令?

我想以这种方式链接命令:

var cmdGroups = []*commands.CmdGroup {
    commands.MakeCmdGroup("foo", cmd1, cmd2, cmd3).AddConstraint(cmd1, cmd2).AddConstraint(cmd2, cmd1, cmd3),
    commands.MakeCmdGroup("bar", cmd1, cmd4).AddConstraint(cmd1, cmd4),
}
Run Code Online (Sandbox Code Playgroud)

我想把我的链子分成几行,因为80列长度的原因,但Go不会让我编译这个:

var cmdGroups = []*commands.CmdGroup {
    commands.MakeCmdGroup("foo", cmd1, cmd2, cmd3)
            .AddConstraint(cmd1, cmd2)
            .AddConstraint(cmd2, cmd1, cmd3),
    commands.MakeCmdGroup("bar", cmd1, cmd4)
            .AddConstraint(cmd1, cmd4),
}
Run Code Online (Sandbox Code Playgroud)

我能做什么 ?

go chaining

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

无法理解如何编译多个文件中的代码

好的,Go的主要卖点是它易于编译和精彩的工具链,但作为一个新手,我真的迷失在那里,无法理解关于这一点的文档.

我在两个文件中有一个堆栈玩具示例(一个用于类型定义和方法stack.go,一个用于主程序,一个用于调用main.go),两个都在我的GOPATH/src/stacker目录中.

  1. 应该如何命名每个文件?它有什么重要意义吗?是否至少有一个约定?强制命名?
  2. 包名应该是什么?我明白他们应该使用相同的包名,但哪一个?是stacker吗?
  3. main.go,我应该如何使用该import指令导入stack.go

我尝试了很多组合,直到现在都没有工作.

go

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

如何从 Vec 过滤值并仍然返回 Vec?

我有一个函数,它采用 a &Vec<Word>(其中Word是本地定义的类型)并且应该返回 a Vec<Word>(或 a &Vec<Word>)。该函数的定义包括从参数中过滤值:

fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
    words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
    words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
Run Code Online (Sandbox Code Playgroud)

我不想返回切片,我真的想要一个Vec. 有没有办法在不Vec从切片中手动构建 a 的情况下做到这一点?

这是一个 MCVE:

type Word = [char; 10];

fn matches(w1: &Word, w2: &Word) -> bool {
    true
}

fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
    words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}


fn main() {
    let w1 = …
Run Code Online (Sandbox Code Playgroud)

filter rust

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

在Go中,我怎么说我想要匹配所有类型的空间,包括不破坏的空间?

我必须匹配给定的模式,如下所示:

Place *: *(.*)
Run Code Online (Sandbox Code Playgroud)

换句话说,我有一个标签,一些空格,冒号,一些空格和我想要的值.

但是,我的数据中有一些空格不是通常的20ASCII字符,而是非空格(unicode字符\u00A0).我怎么能匹配它们?我想过要用

Place\s*:\s*(.*)
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于\u00A0空白.这是regexp模块的错误还是这个想要的行为?如果是后者,如何在不列出所有空格的情况下匹配所有类型的空间?

regex unicode whitespace go

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

如何修改`RefCell <Option <T >>`的内容?

我有一个Option<T>由几个结构共享,必须是可变的.我正在使用RefCell,因为据我所知,它是这项工作的工具.如何访问(和更改)其中的内容Option<T>

我尝试了以下方法:

use std::cell::RefCell;

#[derive(Debug)]
struct S {
    val: i32
}

fn main() {
    let rc: RefCell<Option<S>> = RefCell::new(Some(S{val: 0}));
    if let Some(ref mut s2) = rc.borrow_mut() {
        s2.val += 1;
    }
    println!("{:?}", rc);
}
Run Code Online (Sandbox Code Playgroud)

但编译器不会让我这样做:

error[E0308]: mismatched types
  --> <anon>:10:12
   |
10 |     if let Some(ref mut s2) = rc.borrow_mut() {
   |            ^^^^^^^^^^^^^^^^ expected struct `std::cell::RefMut`, found enum `std::option::Option`
   |
   = note: expected type `std::cell::RefMut<'_, std::option::Option<S>, >`
              found type `std::option::Option<_>`
Run Code Online (Sandbox Code Playgroud)

rust

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

使用for循环重复消息

我在学校有一个作业,我们应该从promt中获取一个文本字符串,然后让警报打印文本字符串10次.但我们必须使用for循环.但即使我阅读了涵盖此内容的所有页面,我似乎无法让它工作.

function buttonAction7() {
    var someMsg = prompt("Write something");    
    for(var i = 0; i < 10; i++){
        someMsg+someMsg; 
    }   
    alert(someMsg);
} 
Run Code Online (Sandbox Code Playgroud)

javascript for-loop repeat

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