我知道我可以迭代一张地图m,
for k, v := range m { ... }
Run Code Online (Sandbox Code Playgroud)
并寻找一个键,但有一种更有效的方法来测试一个键在地图中的存在吗?
我在语言规范中找不到答案.
如何在运行时获取自己的程序名称?什么是Go等同于C/C++的argv [0]?对我来说,使用正确的名称生成用法很有用.
更新:添加了一些代码.
package main
import (
"flag"
"fmt"
"os"
)
func usage() {
fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n")
flag.PrintDefaults()
os.Exit(2)
}
func main() {
flag.Usage = usage
flag.Parse()
args := flag.Args()
if len(args) < 1 {
fmt.Println("Input file is missing.");
os.Exit(1);
}
fmt.Printf("opening %s\n", args[0]);
// ...
}
Run Code Online (Sandbox Code Playgroud) 可能的重复:
当我们定义一个宏时,do(0)有什么用?
为什么在C/C++宏中有时会出现无意义的do/while和if/else语句?
C多行宏:do/while(0)vs scope block
我已经看到了很多这样的用法,以前我是程序员想要轻松打破一段代码.为什么我们需要在这里执行while {...} while(0)循环?我们试图告诉编译器一些东西吗?
例如,在Linux内核2.6.25中,包含/ asm-ia64/system.h
/*
* - clearing psr.i is implicitly serialized (visible by next insn)
* - setting psr.i requires data serialization
* - we need a stop-bit before reading PSR because we sometimes
* write a floating-point register right before reading the PSR
* and that writes to PSR.mfl
*/
#define __local_irq_save(x) \
do { \
ia64_stop(); \
(x) = ia64_getreg(_IA64_REG_PSR); \
ia64_stop(); \
ia64_rsm(IA64_PSR_I); \
} while (0)
Run Code Online (Sandbox Code Playgroud) 在字符串x中查找包含另一个字符串的所有字符的最小窗口宽度y.例如:
String x = "coobdafceeaxab"
String y = "abc"
Run Code Online (Sandbox Code Playgroud)
答案应该是5,因为x其中包含所有三个字母的最短子字符串y是"bdafc".
我可以想到一个复杂的天真解决方案O(n^2 * log(m)),在哪里n = len(x)和m = len(y).有谁能建议更好的解决方案?谢谢.
更新:现在想起来,如果我将我的设置更改为tr1::unordered_map,那么我可以将复杂性降低到O(n^2),因为插入和删除都应该是O(1).
我正在学习Tcl.在Perl中,我可以这样做:
$ perl -e 'for ($i = 0; $i < 5; $i++) { printf("name%03d\n", $i) }'
name000
name001
name002
name003
name004
Run Code Online (Sandbox Code Playgroud)
我可以在Tcl中这样做吗?
我希望得到1/7更好的精确度,但它被截断了.当我转换有理数时,如何才能获得更好的精度?
>>> str(1.0/7)[:50]
'0.142857142857'
Run Code Online (Sandbox Code Playgroud) 今天我看到了一份工作描述,要求"用C++编写重要的经验,并在结构化设计原则方面进行彻底的基础",所以我想到了这些原则是什么.首先我觉得用一个句子看C++和"结构化设计"有点奇怪,然后我想,OK C++是一种多范式编程语言,所以也许它像C一样使用.我也查了一下维基百科页面并阅读关于异常处理和状态机是反结构化设计(毫不奇怪),但我仍然觉得很多东西都缺失了.所以我问你,最重要的结构化软件设计原则是什么?
language-agnostic programming-languages software-design design-principles
项目Euler 126说:"如果我们再在这个固体中添加第二层,则需要四十六个立方体来覆盖每个可见的面部."
怎么会?我认为在3x2x1上铺设另一个3x2x1使其成为3x2x2,你需要6覆盖顶部,6覆盖底部,3 + 2 + 3 + 2覆盖每一层,所以总数是32,每个白色面都是覆盖,对吗?我怎么错了?我很努力,但我不明白.提前致谢.
#!/usr/bin/perl
use Data::Dumper;
use strict;
use List::Util qw(shuffle);
my @arr = [qw(Foo Bar Baz Qux Quux Quuz)];
@arr = shuffle @arr;
print Dumper @arr;
Run Code Online (Sandbox Code Playgroud)
Perl 版本是 v5.32.0。我看到的结果总是Foo Bar Baz Qux Quux Quuz.
$ ~/tmp/shuffle.perl
$VAR1 = [
'Foo',
'Bar',
'Baz',
'Qux',
'Quux',
'Quuz'
];
$ /usr/bin/perl --version
This is perl 5, version 32, subversion 0 (v5.32.0) built for x86_64-linux-gnu-thread-multi
Run Code Online (Sandbox Code Playgroud) 我正在尝试解析文本文件以查找模式然后获取子字符串.这段代码片段运行正常,但我可以改进吗?我可以在这里最小化复制吗 即我得到一行并将其存储在buf然后构造一个字符串,这个复制可以被删除吗?
简而言之,实现这一目标的惯用方法是什么?
std::ifstream f("/file/on/disk");
while (!f.eof()) {
char buf[256];
f.getline(buf, sizeof(buf));
std::string str(buf);
if (str.find(pattern) != std::string::npos)
{
// further processing, then break out of the while loop and return.
}
}
Run Code Online (Sandbox Code Playgroud)