我的代码中有一个块,其中for循环应该根据条件向前或向后运行.
if (forwards) {
for (unsigned x = 0; x < something.size(); x++ ) {
// Lots of code
}
} else {
for (unsigned x = something.size()-1 ; x >= 0 ; x-- ) {
// Lots of code
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一个很好的方法来设置它,所以我不重复两次for循环中的所有代码?
有问题的'东西'是std :: vector <>,所以也许它可以用迭代器?(我没有使用C++ 11)
我正在尝试在R中复制一个shell命令,并且无法弄清楚如何将命令串在一起.这只返回工作文件夹的内容(system()由于某种原因失败):
> shell("dir")
Volume info ..
Directory of E:\Documents\R
contents are listed..
Run Code Online (Sandbox Code Playgroud)
现在让我们尝试导航到C盘并运行dir(不使用明显的dir C:)..
> shell("cd C:")
C:\
> shell("dir")
Volume in drive E is GT
etc..
Run Code Online (Sandbox Code Playgroud)
所以似乎命令不能单独输入,因为shell不记得工作目录.所以..
> (cmd = "cd C:
+ dir")
[1] "cd C:\ndir"
> shell(cmd)
C:\
Run Code Online (Sandbox Code Playgroud)
没有运气,因为没有报告C:文件夹.我尝试过的其他方法也失败了.感谢任何想法.
假设您有一个具有两个成员函数的类T.
char foo() const {...}char foo() {...}.我的理解是,当要求一个常数T时,我们决定(1); 对于非常数T,我们决定(2).
笔记:
我试图谷歌为它,但我得到的旧命中是其他重载决议涉及const的情况.然而,链接到一个老SO实际上解释上面显然很棒.
当重新阅读Stroustrup的"The C++编程语言",第2版("特别版"),第11.12节中的String/Cref示例时,就出现了这一点.296.由于Stroustrup是如此精确,答案可能在前几节,但我没有看到在哪里.参考Stroustrup中的部分也非常受欢迎(第2版最好,因为这是我所拥有的).第10.2.6节将const成员引入为"不改变对象值的那些",这暗示了答案,但并没有将我作为明确的解决方案指令.
我有一个调用mkstemp()的程序,写了一些返回fd的东西,然后关闭fd.我希望文件保留,直到我自己删除它!使用rm命令等等.我的问题是:Linux会在关闭后删除此文件(fd)吗?
我正在使用 ioslides 的默认主题进行演示,但在幻灯片上安排绘图时遇到困难。
我对相应的幻灯片使用以下代码:
```{r crint1, fig.width = 7, fig.height = 5.5, fig.retina = NULL, fig.align="center"}
options(warn=-1)
load("path_to_data.RData")
ord <- order(cor.table$COR)
barplot(cor.table$COR[ord], names.arg=cor.table$group[ord],horiz=T
, cex.name=.6, border=F, space=.3, col="gray30",
xlab="Correlation Coefficient", las=1)
grid(NULL, NA, col="white", lty="solid", lwd=0.7)
abline(v=mean(cor.table$COR), lwd=2, lty=2, col="red")
text(mean(cor.table$COR), 1, "Average", cex=.8, col="red", pos=4)```
Run Code Online (Sandbox Code Playgroud)
结果如下:

没关系,但我希望情节从标题正下方开始并在幻灯片上扩展更多,因此行的名称是可读的并且不会重叠。
我尝试使用fig.height和fig.width,但它们只会扩展绘图的大小而不会更改起始坐标(这会使绘图超出幻灯片)。
有什么方法可以减少标题下方的空白区域并使用该边距来扩展绘图?我假设我必须编辑该特定幻灯片的 CSS,我只是不确定如何。任何帮助表示赞赏。
我正在使用一个简单的SFINAE技巧来检查成员函数是否存在,如下所示:
#include <type_traits>
template <typename C>
struct has_size {
template <typename T>
static constexpr auto check(T*) ->
decltype(std::declval<T const>().size(), std::true_type{});
template <typename>
static constexpr auto check(...) -> std::false_type;
static constexpr bool value = decltype(check<C>(nullptr))::value;
};
// Usage:
static_assert(has_size<std::vector<int>>::value, "std::vector<int> has size()");
Run Code Online (Sandbox Code Playgroud)
(我知道现在有一种更简单的方法,但是当我编写这段代码时却没有回来.)
此代码适用于GCC.然而,Clang发出警告1(Apple LLVM 7.3以上的所有版本,无论哪个是上游版本):
decltype.cpp:15:27: error: inline function 'has_size<std::__1::vector<int, std::__1::allocator<int> > >::check<std::__1::vector<int, std::__1::allocator<int> > >' is not defined [-Werror,-Wundefined-inline]
static constexpr auto check(T*) ->
^
decltype.cpp:22:44: note: used here
static constexpr bool value = decltype(check<C>(nullptr))::value; …Run Code Online (Sandbox Code Playgroud) 从C ++ 20开始,我们可以通过执行以下操作从向量中按值删除元素:
std::vector<int> v = {10,20,30,40,50};
std::erase(v,30);
Run Code Online (Sandbox Code Playgroud)
那真的很方便,更不用说了std::erase_if。
但是,如果我们有一个成对的向量并且要擦除,仅当成对的second值匹配时该怎么办?
std::pair<int, std::string> foo = std::make_pair(1,"1");
std::pair<int, std::string> foo2 = std::make_pair(2,"2");
std::vector< std::pair<int, std::string> > v;
v.push_back(foo);
v.push_back(foo2);
std::erase(v, make_pair(1,"2")); //This is not going to work!
Run Code Online (Sandbox Code Playgroud)
那么,有没有一种方法可以通过second向量对中的值擦除元素?
我正在使用 Google Protocol Buffers 和 Python 来解码一些大数据文件——每个文件 200MB。我下面有一些代码展示了如何解码分隔流,它工作得很好。然而,它使用read()将整个文件加载到内存中然后迭代它的命令。
import feed_pb2 as sfeed
import sys
from google.protobuf.internal.encoder import _VarintBytes
from google.protobuf.internal.decoder import _DecodeVarint32
with open('/home/working/data/feed.pb', 'rb') as f:
buf = f.read() ## PROBLEM-LOADS ENTIRE FILE TO MEMORY.
n = 0
while n < len(buf):
msg_len, new_pos = _DecodeVarint32(buf, n)
n = new_pos
msg_buf = buf[n:n+msg_len]
n += msg_len
read_row = sfeed.standard_feed()
read_row.ParseFromString(msg_buf)
# do something with read_metric
print(read_row)
Run Code Online (Sandbox Code Playgroud)
请注意,此代码来自另一篇 SO 帖子,但我不记得确切的网址。我想知道是否有readlines()协议缓冲区的等效项允许我一次读取一条分隔消息并对其进行解码?我基本上想要一个不受 RAM 限制的管道,我必须加载文件。
似乎有一个pystream-protobuf包支持其中一些功能,但它已经有一两年没有更新了。7年前的帖子也问过类似的问题。但我想知道从那以后是否有任何新信息。
基本上,我有 2 个线程,接收和发送。我希望能够输入一条消息,每当我收到一条新消息时,它就会“打印在我正在输入的行上方”。首先我认为会起作用,您可以粘贴它,它将运行:
import multiprocessing
import time
from reprint import output
import time
import random
import sys
def receiveThread(queue):
i = 0
while True:
queue.put(i)
i+=1
time.sleep(0.5)
def sendThread(queue):
while True:
a = sys.stdin.read(1)
if (a != ""):
queue.put(a)
if __name__ == "__main__":
send_queue = multiprocessing.Queue()
receive_queue = multiprocessing.Queue()
send_thread = multiprocessing.Process(target=sendThread, args=[send_queue],)
receive_thread = multiprocessing.Process(target=receiveThread, args=[receive_queue],)
receive_thread.start()
send_thread.start()
with output(initial_len=2, interval=0) as output_lines:
while True:
output_lines[0] = "Received: {}".format(str(receive_queue.get()))
output_lines[1] = "Last Sent: {}".format(str(send_queue.get()))
Run Code Online (Sandbox Code Playgroud)
但是这里发生的是我无法发送数据。与我 put 时不同,输入不会给我一个 EOF a …
我试图让我和我的同事开始使用 renv。我发现了关于应该/可以提交给 git 进行协作的不同信息:
显然,开发人员也就使用哪种策略进行了一些讨论。
一般来说(来自 pyhton,基本上 arequirements.txt就足够了),我非常喜欢方法 2。它有什么缺点吗?合作者必须做的事情有什么变化(例如以renv::restore或开头renv::init)?