我有二进制文件,其内容我试图读入一个向量.所有文件都是相同的大小,但使用下面的代码,最终的矢量大小总是比文件大小小一点,并且它与文件不同(但每个文件都相同).我对这里发生的事感到困惑......
#include <fstream>
#include <vector>
#include <iostream>
#include <iterator>
int main(int argc, char *argv[]) {
std::string filename(argv[1]);
// Get file size
std::ifstream ifs(filename, std::ios::binary | std::ios::ate);
int size = (int)ifs.tellg();
std::cout << "Detected " << filename << " size: " << size << std::endl; // seems correct!
// Load file
ifs.seekg(0, std::ios::beg);
std::istream_iterator<char unsigned> start(ifs), end;
std::vector<char unsigned> v;
v.reserve(size);
v.assign(start, end);
std::cout << "Loaded data from " << filename << ", with " << v.size() << " elements" << …
Run Code Online (Sandbox Code Playgroud) 我有两个data.tables,一个有另一个的行/列子集.我想将较小的data.table的值添加到较大的值的值:
DT1 <- as.data.table(matrix(c(0, 1, 2, 3), nrow=2, ncol=2,
dimnames=list(c("a", "b"), c("a", "b"))), keep=T)
DT2 <- as.data.table(matrix(c(0, 0, 1, 2, 2, 1, 1, 0, 3), nrow=3, ncol=3,
dimnames=list(c("a", "b", "c"), c("a", "b", "c"))), keep=T)
DT1
# rn a b
#1: a 0 2
#2: b 1 3
DT2
# rn a b c
#1: a 0 2 1
#2: b 0 2 0
#3: c 1 1 3
Run Code Online (Sandbox Code Playgroud)
我想将DT1添加到DT2,以便我得到
# rn a b c
#1: a 0 4 1
#2: …
Run Code Online (Sandbox Code Playgroud) 我正在为自定义语言编写.ctags文件...与大多数语言一样,它允许在一行中进行多个变量声明..即:
int a, b, c;
Run Code Online (Sandbox Code Playgroud)
我有一个基本的正则表达式,它识别'a':
--regex-mylang=/^[ \t]*int[ \t]*([a-zA-Z_0-9]+)/\1/v,variable/
Run Code Online (Sandbox Code Playgroud)
如何修改它以使其与'b'和'c'匹配?我在ctags文档中找不到任何可以在一行中处理多个匹配的内容.
我有一个工作环境,我经常在其中构建二进制文件,然后使用该二进制文件启动长时间运行的进程。当这些正在运行时,我想切换到另一个 git 分支并在那里做一些工作,并可能构建一些不会覆盖当前运行的新二进制文件。
现在,构建和运行脚本使用$OUT_DIR
env 变量来确定二进制文件的输出目录。理想情况下,我希望$OUT_DIR
特定于分支以避免上述构建相互覆盖的问题。
起初,这对于 post-checkout 钩子来说似乎是一项简单的工作——设置OUT_DIR
为OUT_DIR_BASE + "/" + current branch
... 除了 post-checkout 钩子在子 shell 中运行,所以它不能设置父环境变量。
有什么聪明的方法可以解决这个问题吗?
我考虑过的一些想法:
export OUT_DIR...
”命令输出到一个文件,并让用户获取它——这很烦人,人们会忘记这样做。OUT_DIR
文件写入.rc 文件并让构建/运行脚本从那里获取它,但这需要更改构建环境,并且用户体验会变得更糟(即您不能执行“ cd $OUT_DIR
”来进入输出目录...git checkout
'编写一个包装器,它会OUT_DIR
适当地打开一个带有set的新外壳......但这是“泄漏”的外壳,随着时间的推移,我会运行相当多的外壳。这些看起来都不是很好,因为感觉应该是一个简单的解决方案。
我有两个数据框ev1和ev2,描述了在许多测试中收集的两种类型事件的时间戳.因此,每个数据帧都有"test_id"和"timestamp"列.我需要找到的是在同一测试中每个ev2的最小距离ev1.
我有一个工作代码合并两个数据集,计算距离,然后使用dplyr过滤最小距离:
ev1 = data.frame(test_id = c(0, 0, 0, 1, 1, 1), time=c(1, 2, 3, 2, 3, 4))
ev2 = data.frame(test_id = c(0, 0, 0, 1, 1, 1), time=c(6, 1, 8, 4, 5, 11))
data <- merge(ev2, ev1, by=c("test_id"), suffixes=c(".ev2", ".ev1"))
data$distance <- data$time.ev2 - data$time.ev1
min_data <- data %>%
group_by(test_id, time.ev2) %>%
filter(abs(distance) == min(abs(distance)))
Run Code Online (Sandbox Code Playgroud)
虽然这很有效,但合并部分非常慢并且感觉效率低下 - 我正在为同一个test_id生成一个包含ev2-> ev1的所有组合的巨大表格,只是将其过滤为一个.在合并期间,似乎应该有一种"即时过滤"的方法.在那儿?
更新:当使用akrun概述的data.table方法时,以下两个"group by"列的情况会失败:
ev1 = data.frame(test_id = c(0, 0, 0, 1, 1, 1), time=c(1, 2, 3, 2, 3, 4), group_id=c(0, …
Run Code Online (Sandbox Code Playgroud) 我正在解析一种语言,该语言的语句为“ code”,后跟“ {”,后跟一堆我对解析不感兴趣的代码,后跟“}”。理想情况下,我希望规则如下:
skip_code: 'code' '{' ~['}']* '}'
..可以简单地跳到右花括号。问题在于被跳过的代码本身可能具有成对的花括号。因此,我本质上需要做的是运行一个计数器,并在每个“ {”上递增,并在每个“}”上递减,并在计数器回到0时结束解析规则。
ANTLR4中执行此操作的最佳方法是什么?当检测到“代码”时,我应该跳到自定义函数并吞下标记并运行计数器吗?还是有一些优雅的方法可以在语法本身中表达出来?
编辑:一些示例代码,根据要求:
class foo;
int m_bar;
function foo_bar;
print("hello world");
endfunction
code {
// This is some C code
void my_c_func() {
printf("I have curly braces {} in a string!");
}
}
function back_to_parsed_code;
endfunction
endclass
Run Code Online (Sandbox Code Playgroud) 这似乎应该很容易,但我找不到答案:(.我正在尝试规范化data_table的每一行,如下所示:
normalize <- function(x) {
s = sum(x)
if (s>0) {
return(x/s)
} else {
return 0
}
}
Run Code Online (Sandbox Code Playgroud)
如何在data.table的每一行上调用此函数并获取规范化的data.table?我可以做一个for循环,但这肯定不是正确的方法,并且apply(data, 1, normalize)
,据我所知,将我的data.table转换为一个性能很大的矩阵.
我有两个data.tables,一个有另一个的行/列子集.对于较小的表中的每个非零值,我想将较大的data.table的值递增1:
DT1 <- as.data.table(matrix(c(0, 1, 2, 3), nrow=2, ncol=2,
dimnames=list(c("a", "b"), c("a", "b"))), keep=T)
DT2 <- as.data.table(matrix(c(0, 0, 1, 2, 2, 1, 1, 0, 3), nrow=3, ncol=3,
dimnames=list(c("a", "b", "c"), c("a", "b", "c"))), keep=T)
DT1
# rn a b
#1: a 0 2
#2: b 1 3
DT2
# rn a b c
#1: a 0 2 1
#2: b 0 2 0
#3: c 1 1 3
Run Code Online (Sandbox Code Playgroud)
我想在DT2中增加值,以便我得到
# rn a b c
#1: a 0 3 1
#2: …
Run Code Online (Sandbox Code Playgroud)