小编eri*_*rip的帖子

为什么我需要在C++中使用`size_t`?

作为初学者,我真的很困惑size_t.我可以使用int,float或其他类型.为什么还要声明size_t类型.我感觉不到它的优点.我看过一些页面,但我仍然无法理解.

c++ visual-c++ c++11

7
推荐指数
1
解决办法
1928
查看次数

如果选项为无使用猫IO,如何在for-comprehension中停止执行?

如果我只是使用选项进行理解,一切都按预期进行:

val a = Some(1)
val b = None
val c = Some(3)

val r = for {
  aa <- a
  bb <- b
  cc <- c
} yield aa + bb + cc

println(r) // None, because b is None
Run Code Online (Sandbox Code Playgroud)

但如何使用猫IO实现相同的行为?

import cats.effect.IO
// in reality this will be a methods with side effect
val a = Some(1)
val b = None
val c = Some(3)

val r = for {
  _ <- IO{println("a"); a}
  _ <- IO{println("b"); b} …
Run Code Online (Sandbox Code Playgroud)

monads functional-programming scala scala-cats

7
推荐指数
1
解决办法
322
查看次数

传递基础参考字段的生命周期?

我正在尝试制作两个在底层数据集上运行的结构体; 一个提供不可变的"读取"操作,另一个允许修改.为此,我需要能够在修改对象中使用读取函数 - 因此,我在修改器函数中创建一个临时的新读取对象,并查看基础数据.

这是一些代码:

struct Read<'db> {
    x: &'db i32
}

impl<'db> Read<'db> {
    pub fn get(&'db self) -> &'db i32 { self.x }
}

struct Write<'db> {
    x: &'db mut i32
}

impl<'db> Write<'db> {
    fn new(x: &mut i32) -> Write { Write{x: x} }

    fn as_read(&'db self) -> Read<'db> {
        Read{x: self.x}
    }

    pub fn get(&'db self) -> &'db i32 { self.as_read().get() }
}    


fn main() {
    let mut x = 69i32;
    let y = Write::new(&mut x); …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
57
查看次数

不能在Rust文档测试中使用依赖包

我正在尝试为Rust写的一个项目编写文档.其中一个文档需要使用regex::Regex.这是我要写的文档:

/// Return a list of the offsets of the tokens in `s`, as a sequence of `(start, end)`
/// tuples, by splitting the string at each successive match of `regex`.
///
/// # Examples
///
/// ```
/// use rusty_nltk::tokenize::util::regexp_span_tokenize;
/// use regex::Regex;
///
/// let s = "Good muffins cost $3.88\nin New York.  Please buy me
///         two of them.\n\nThanks.";
/// let regex = regex::Regex::new(r"\s").unwrap();
/// let spans = regexp_span_tokenize(s, regex).unwrap();
/// ```
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

---- tokenize::util::regexp_span_tokenize_0 …
Run Code Online (Sandbox Code Playgroud)

rust rust-crates rustdoc

6
推荐指数
1
解决办法
553
查看次数

如何模拟remove_unless

我有代码删除std::vector<int>少于一些的所有元素int limit.我写了一些部分应用lambdas的函数:

auto less_than_limit = [](int limit) {
  return [=](int elem) {
    return limit > elem;
  };
};

auto less_than_three = less_than_limit(3);
Run Code Online (Sandbox Code Playgroud)

当我测试它时std::vector<int> v{1,2,3,4,5};,我得到了预期的结果:

for(auto e: v) {
  std::cout << less_than_three(e) << " ";
}
// 1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)

我可以轻松删除少于三个的所有元素:

auto remove_less_than_three = std::remove_if(std::begin(v), std::end(v), less_than_three);

v.erase(remove_less_than_three, v.end());

for(auto e: v) {
  std::cout << e << " ";
}
// 3 4 5
Run Code Online (Sandbox Code Playgroud)

如何使用less_than_three?删除大于或等于3的元素?

我试过包装less_than_threestd::not1,却得到了错误:

/usr/local/Cellar/gcc/5.3.0/include/c++/5.3.0/bits/stl_function.h:742:11: …
Run Code Online (Sandbox Code Playgroud)

c++ erase-remove-idiom c++11 c++14

6
推荐指数
2
解决办法
410
查看次数

获取函数结果的参数集

我不知道这个模式的名称,即使它存在.我需要一个函数来返回一组将在另一个函数中使用的参数.例如,我有这个功能:

void foo(int a, float b, some_class c);
Run Code Online (Sandbox Code Playgroud)

我想写一个这样的函数:

//Theoretical code:
arguments get_arguments(){
    return arguments(0,0.0f, some_class());
}
Run Code Online (Sandbox Code Playgroud)

然后foo像这样打电话:

foo(get_arguments());
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果有,怎么样?

c++ c++11

6
推荐指数
3
解决办法
218
查看次数

什么是最小可能的分母/除数值?

我正在编写一个代码来防止零分母/除数因分割而避免NaN值.

我想知道C++中双倍的最小可能值是什么,以及如何找到或者是什么原因?

c++ c++11

6
推荐指数
2
解决办法
315
查看次数

新的 emplace_back 签名

签名的的emplace_back方法std::vector已经更新到返回引用:

template< class... Args >
constexpr reference emplace_back( Args&&... args );
Run Code Online (Sandbox Code Playgroud)

虽然我可以找到许多(较旧的)帖子,说明为什么不需要这样做,甚至是糟糕的设计,但我找不到有关更改理由的来源。

  • 为什么会发生此更新?如果明显的“提供更易于使用的干扰”成立,为什么不push_back得到更新?
  • 它不会通过使接口复杂化而使异常安全要求复杂化吗?

我也在寻找介绍更改的论文,如果您能指点我,将不胜感激。

c++ c++-standard-library language-lawyer

6
推荐指数
0
解决办法
93
查看次数

为什么我们可以在C++中将解除引用的指针递增到常量数据?

我很惊讶c ++允许将解除引用的指针递增到一个常量数据,它不应该允许通过指向const数据的指针.考虑一下代码:

#include<iostream>
#include<climits>
using namespace std;

int main(){
    int x = 2;

    const int *xPtr2 = &x;
    *xPtr2++;
    cout << x << endl;

}
Run Code Online (Sandbox Code Playgroud)

但是x的值仍然是2.这意味着*xPtr2实际上没有增加.我也试过*xPtr2 = 3,但这次它显示了编译错误.为什么会这样?

c++ pointers

5
推荐指数
1
解决办法
274
查看次数

为什么NLTK库中有不同的Lemmatizers?

>> from nltk.stem import WordNetLemmatizer as lm1
>> from nltk import WordNetLemmatizer as lm2
>> from nltk.stem.wordnet import WordNetLemmatizer as lm3
Run Code Online (Sandbox Code Playgroud)

对我来说,这三个作品都是以同样的方式,但只是为了确认,它们是否提供了不同的东西?

python nlp nltk lemmatization

5
推荐指数
1
解决办法
487
查看次数