我有一个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)
我怎么解决这个问题?
我在Go中有一个程序,我希望在一堆二进制文件中编译,每个二进制文件都有const不同的值.更清楚的是,我有类似的东西:
const wordLen = 6
type knowledge [wordLen]byte
Run Code Online (Sandbox Code Playgroud)
这里,wordLen与值6相关联,但我希望有不同的二进制文件,值为5到10.我可以使它成为变量,然后使用切片而不是数组,但这会产生巨大的性能影响在我的软(是的,我试过).
我希望在go build参数上有一些构建标记,以指示wordLen给定二进制文件的值是什么.那么,(尽可能惯用)的方式是什么呢?
我刚刚发现了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)
有什么诀窍?
我有一个昂贵的功能,我应用于切片的所有项目.我正在使用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)
是否有更好的(即更有效和/或更惯用)的方式来做到这一点?
我有几个函数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) 我想以这种方式链接命令:
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的主要卖点是它易于编译和精彩的工具链,但作为一个新手,我真的迷失在那里,无法理解关于这一点的文档.
我在两个文件中有一个堆栈玩具示例(一个用于类型定义和方法stack.go,一个用于主程序,一个用于调用main.go),两个都在我的GOPATH/src/stacker目录中.
stacker吗?main.go,我应该如何使用该import指令导入stack.go?我尝试了很多组合,直到现在都没有工作.
我有一个函数,它采用 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) 我必须匹配给定的模式,如下所示:
Place *: *(.*)
Run Code Online (Sandbox Code Playgroud)
换句话说,我有一个标签,一些空格,冒号,一些空格和我想要的值.
但是,我的数据中有一些空格不是通常的20ASCII字符,而是非空格(unicode字符\u00A0).我怎么能匹配它们?我想过要用
Place\s*:\s*(.*)
Run Code Online (Sandbox Code Playgroud)
但它似乎不适用于\u00A0空白.这是regexp模块的错误还是这个想要的行为?如果是后者,如何在不列出所有空格的情况下匹配所有类型的空间?
我有一个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) 我在学校有一个作业,我们应该从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)