小编Kon*_*lph的帖子

C++中未使用的字符串输入

我正在用C++编写一个程序,我应该从用户那里接收一个字符串而不在屏幕上显示它(例如:apassword).我尝试使用cingets接受字符串.但两者都会回显用户在控制台中输入的字符.

那么在C++中有没有任何函数或任何其他方法呢?

c++

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

对于在类外定义的友元函数,模板上的隐式转换查找失败

以下代码

#include <cassert>
#include <cstddef>

template <typename T>
struct foo {
    foo(std::nullptr_t) { }
    //friend bool operator ==(foo lhs, foo rhs) { return true; }

    template <typename U>
    friend bool operator ==(foo<U> lhs, foo<U> rhs);
};

template <typename T>
inline bool operator ==(foo<T> lhs, foo<T> rhs) { return true; }

int main() {
    foo<int> p = nullptr;
    assert(p == nullptr);
}
Run Code Online (Sandbox Code Playgroud)

无法使用错误消息进行编译

foo.cpp:18:5:错误:operator==' p == nullptr'
in''foo.cpp 不匹配:18:5:注意:候选人是:
foo.cpp:14:13:注意:template<class T> bool operator==(foo<T>, foo<T>)
foo.cpp:14:13:注意:模板参数推导/替换失败:
foo.cpp:18:5:注意:不匹配的类型' foo<T> …

c++ templates c++11

9
推荐指数
2
解决办法
1125
查看次数

当eval'ing时,match.call在错误的环境中调用

我尝试let使用以下语义实现一个函数:

> let(x = 1, y = 2, x + y)
[1] 3
Run Code Online (Sandbox Code Playgroud)

...在概念上有点类似于substitute语法with.

以下代码几乎可以工作(例如上面的调用工作):

let <- function (...) {
    args <- match.call(expand.dots = FALSE)$`...`
    expr <- args[[length(args)]]
    eval(expr,
         list2env(lapply(args[-length(args)], eval), parent = parent.frame()))
}
Run Code Online (Sandbox Code Playgroud)

注意嵌套eval,外部用于评估实际表达式,而inner用于评估参数.

不幸的是,后一种评估发生在错误的背景下.当尝试let使用检查当前帧的函数调用时,这变得很明显,例如match.call:

> (function () let(x = match.call(), x))()
Error in match.call() :
  unable to find a closure from within which 'match.call' was called
Run Code Online (Sandbox Code Playgroud)

我想过提供父框架作为评估环境eval,但这不起作用:

let <- function (...) {
    args …
Run Code Online (Sandbox Code Playgroud)

eval r substitution

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

设置parent.env,然后是`detach`,segfaults

下面的代码在R(3.0.2中执行但是我假设它与其他版本类似)时可重现的段错误:

ns = new.env(parent = .BaseNamespaceEnv)
local(f <- function () 42, envir = ns)
x = list2env(as.list(ns), parent = as.environment(2))
parent.env(.GlobalEnv) = x
detach()
Run Code Online (Sandbox Code Playgroud)

是的,我知道文件parent.env说的

替换功能parent.env<-非常危险,因为它可以用于以违反内部C代码假设的方式破坏性地改变环境.它可能会在不久的将来被删除.

这就是我似乎遇到的问题.但是,我想了解为什么这种行为是这样的,以及如何避免它.

以下简化代码并不会有这样的问题:

x = new.env(parent = as.environment(2))
local(f <- function () 42, envir = x)
parent.env(.GlobalEnv) = x
detach()
Run Code Online (Sandbox Code Playgroud)

...所以它似乎有所不同,它x包含parent.env一个不同(未连接)环境的函数.

同样,使用attachparent.env<-不是导致崩溃.(那么为什么不简单地使用attach?因为在我的代码中,.GlobalEnv部分是一个可能引用不同环境的变量.)

崩溃转储告诉我段错误发生在do_detach(envir.c)中.该代码包含以下行:

isSpecial = IS_USER_DATABASE(s);
if(isSpecial) { …
Run Code Online (Sandbox Code Playgroud)

environment r

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

线程安全矢量

首先让我说我已经阅读了关于这个主题的大部分SO和其他主题.

我理解的方式,std :: vector 在推回新项目时重新分配内存,这是我的情况,除非我保留了足够的空间(这不是我的情况).

我所拥有的是std :: shared_ptr的向量,并且该向量包含唯一对象(或者更准确地说,指向向量中的唯一对象).

通过指针处理这些对象是围绕Factory&Handler类进行的,但是可以从包装类外部访问指向对象的指针,并且可以修改成员值.任何时候都不会发生删除.

如果我正确理解先前关于std :: vector和线程安全的SO问题中提出的问题,添加(push_back)新对象可能会使先前的指针无效,因为向量内部可能会重新分配内存并复制所有内容,这当然是一场灾难为了我.

我的意图是从该向量读取,通常通过指针修改对象,并从异步运行的线程向向量添加新项.

所以,

  1. 使用原子或互斥是不够的?如果我从一个线程推回,另一个通过指针处理对象的线程可能最终有一个无效的对象?
  2. 是否有可以处理这种形式的MT问题的库?我一直在阅读的是英特尔的TBB,但由于我已经在使用C++ 11,我希望将更改保持在最低限度,即使这对我来说意味着更多的工作 - 我想在这个过程中学习,而不仅仅是复制粘贴.
  3. 除了在修改对象时锁定访问权限,我希望对向量的异步并行读取访问不会被push_backs无效.我怎样才能做到这一点?

如果它具有任何重要性,那么以上所有内容都是在linux(debian jessie)上使用gcc-4.8并启用了c ++ 11.

我愿意使用微创库.

提前谢谢了 :-)

c++ multithreading vector c++11

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

如何知道计算弦之间的Levenshtein距离所进行的运算?

使用函数stringdist,我可以计算字符串之间的Levenshtein距离:它计算将字符串转换为另一个字符串所需的删除,插入和替换的次数。例如,stringdist("abc abc","abcd abc") = 1因为在第二个字符串中插入了“ d”。

是否有可能知道为获取两个琴弦之间的Levenshtein距离而进行的操作?还是要知道两个字符串之间不同的字符(在此示例中,只有“ d”)?谢谢。

library(stringdist)
stringdist("abc abc","abcde acc") = 3
Run Code Online (Sandbox Code Playgroud)

我想知道:

  • 插入了“ d”

  • 插入了“ e”

  • “ b”被替换为“ c”

或更简单地说,我想要列表(“ d”,“ e”,“ c”)。

string r levenshtein-distance stringdist

9
推荐指数
2
解决办法
1086
查看次数

从自然语言到 C++ 表达式

任务:

将以下自然语言表达式转换为 C++ 表达式。假设所有变量都是非负数或布尔值(值为真或假)。

自然语言:

a 和 b 都为假或 c 为真,但不能同时为真。

我的解决方案:

(a==0 && b==0)xor(c==1)
Run Code Online (Sandbox Code Playgroud)

教授解决方案:

(!a && !b) != c
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我想我稍微理解了第一个括号,通过说“not-a”和“not-b”,我认为 a 和 b 一定是错误的,前提是 ab 在开始时被假定为非零。对?

  2. 但是说“不等于c”的部分呢?

  3. 我不明白教授的解决方案,谁能帮我分解一下?

感谢您的帮助!

c++ logic

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

检查文件中是否存在值

我正在尝试逐行读取以下文件并检查文件中是否存在值。我目前正在尝试的方法不起作用。我究竟做错了什么?

如果该值存在,我什么都不做。如果没有,那么我将它写入文件。

文件.txt:

123
345
234
556
654
654
Run Code Online (Sandbox Code Playgroud)

代码:

file = open("file.txt", "a+")
lines = file.readlines()
value = '345'
if value in lines:
    print('val ready exists in file')
else:
    # write to file
    file.write(value)
Run Code Online (Sandbox Code Playgroud)

python python-3.7

9
推荐指数
2
解决办法
1686
查看次数

如何输入注释字符串的长度?

我想在 python 中输入注释一个只​​接受单个字符的函数,例如:\n(s: str) -> int

\n

由于 Python 没有单个字符的类型,因此您不能只执行类似(s: char) -> int.

\n

有没有一种方法可以让键入的内容s: str只能是一个字符?

\n

我发现这对于编写代码时的提示很有用。

\n

这是我的完整示例:

\n
import unicodedata\n\nroman_numeral_lookup = {"I": 1, "V": 5, "X": 10, ...}\n\ndef exact_roman_numeral(s: str) -> int:\n    """Return the value of a single Roman numeral. Dosen\'t support multicharacter roman numerals such as \'XII\' or Apostrophus."""\n\n    # Convert Unicode Roman numerals into to their normalised text version. e.g. \xe2\x85\xa9 -> X, \xe2\x85\xb0 -> I\n    s = unicodedata.normalize("NFKC", s).upper()\n\n …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

跨多个工作人员共享 python 对象

我们已经使用 FastAPI 创建了一个服务。当我们的服务启动时,它会创建一些 Python 对象,然后端点使用这些对象来存储或检索数据。

生产中的 FastAPI 从多个工人开始。我们的问题是每个工人创建自己的对象而不是共享一个

下面的脚本显示了我们正在做的(简化的)示例,尽管在我们的例子中 Meta() 的使用要复杂得多。

from fastapi import FastAPI, status

class Meta:
   def __init__(self):
      self.count = 0  

app = FastAPI()

meta = Meta()

# increases the count variable in the meta object by 1
@app.get("/increment")
async def increment():
    meta.count += 1
    return status.HTTP_200_OK

# returns a json containing the current count from the meta object
@app.get("/report")
async def report():
    return {'count':meta.count}

# resets the count in the meta object to 0
@app.get("/reset") …
Run Code Online (Sandbox Code Playgroud)

python asynchronous python-asyncio fastapi

9
推荐指数
4
解决办法
3151
查看次数