小编orl*_*rlp的帖子

在C中生成长度为N的所有字符串

我自己尝试编码并且非常失败.这基本上就是我想要的:

a
b
...
z
aa
ba
...
za
ab
bb
...
zz
aaa
baa
...
zzz
Run Code Online (Sandbox Code Playgroud)

最后它应该生成每个字符串,使用charset az生成短于N个字符的字符串.所以我不是在寻找排列(在互联网上可以找到1001个实现),但是对于替换组合(至少在Python中它是如何调用的).订单并不重要,速度是.

c algorithm

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

动态调整大小的boost :: asio :: buffer

我读的boost::asio::ip::udp::socket是这样的:

using boost::asio::ip::udp;

// ...

char recv_buf[128];
udp::endpoint sender_endpoint;
size_t len = socket.receive_from(boost::asio::buffer(recv_buf), sender_endpoint);
Run Code Online (Sandbox Code Playgroud)

现在,这完全正常,但我能够接收到的最大字符数现在是127.但是我遇到了一个问题,因为我需要接受一些数据输入,其长度可以大大改变(并且不是很好 - 带有前缀标题的定义长度,例如).对此的解决方案是动态扩展缓冲区,如向量.是否有可能创建一个动态扩展boost::asio::buffer以接受(理论上)infite量的输入并将其存储在容器中?

c++ buffer dynamic boost-asio

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

allocator.construct循环是否等于std :: uninitialized_copy?

在此上下文中T是某种类型,并且allocator是该类型的分配器对象.默认情况下,std::allocator<T>但这不一定是真的.

我有一大堆记忆allocator.allocate(n).我也有一个容器conT的对象(比如,一个std::vector<T>).我想用T对象初始化那块内存.

存储块的位置存储在T* data.

这两个代码示例是否始终相同?

#include <memory>

// example 1
std::uninitialized_copy(con.begin(), con.end(), data)

// example 2
std::vector<T>::const_iterator in = con.begin();
for (T* out = data; in != con.end(); ++out, ++in) {
    allocator.construct(out, *in);
}
Run Code Online (Sandbox Code Playgroud)

对于这两个?

#include <memory>

T val = T(); // could be any T value

// example 3
std::uninitialized_fill(data, data + n, val)

// example 4
for (T* out = …
Run Code Online (Sandbox Code Playgroud)

c++ stl allocator

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

g ++抱怨constexpr函数不是常量表达式

我已将问题减少到以下几点:

struct A {
    static constexpr std::size_t f() { return 4; }
};

template<std::size_t N>
struct B : A {
    alignas(A::f()) char a[N];
};
Run Code Online (Sandbox Code Playgroud)

我没有看到这有什么问题,但如果我尝试编译使用g++:

main.cpp:9:19: error: expression 'A::f' is not a constant-expression
     alignas(A::f()) char a[N];
                   ^
main.cpp:9: confused by earlier errors, bailing out
Run Code Online (Sandbox Code Playgroud)

再现可用上coliru.

c++ g++ constant-expression

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

是否可以安全地转换PhantomData标记?

这是脱离上下文所以它看起来有点奇怪,但我有以下数据结构:

use std::marker::PhantomData;

pub struct Map<T, M=()> {
    data: Vec<T>,
    _marker: PhantomData<fn(M) -> M>,
}
Run Code Online (Sandbox Code Playgroud)

Map是一个关联映射,其中键被"标记"以防止在另一个不相关的映射上使用来自一个映射的键.用户可以通过传递他们制作的一些独特类型来选择M,例如:

struct PlayerMapMarker;
let mut player_map: Map<String, PlayerMapMarker> = Map::new();
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但是我想为这个地图编写的一些迭代器(例如只提供值的迭代器)在它们的类型中不包含标记.以下转化是否可以安全地丢弃标记?

fn discard_marker<T, M>(map: &Map<T, M>) -> &Map<T, ()> {
    unsafe { std::mem::transmute(map) }
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以编写和使用:

fn values(&self) -> Values<T> {
    Values { inner: discard_marker(self).iter() }
}

struct Values<'a, T> {
    inner: Iter<'a, T, ()>,
}
Run Code Online (Sandbox Code Playgroud)

unsafe rust

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

splint调试解析错误

这是我第一次使用splint(来自Ubuntu存储库),我立即被WTF击中.错误消息:

nightcracker@nightcracker-pc:~/c/brainfuck$ splint brainfuck.c
Splint 3.1.2 --- 03 May 2009

brainfuck.c:17:6: Parse Error. (For help on parse errors, see splint -help
               parseerrors.)
*** Cannot continue.
Run Code Online (Sandbox Code Playgroud)

现在,显然它在第16行第6列看到了错误.让我们检查一下(发布完整代码):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

enum {
    CELL_CHUNK_SIZE = 1024,
};

typedef unsigned char cell;

int main(int argc, char *argv[]) {
    if (argc < 1) {
        fprintf(stderr, "ERROR: Not enough arguments\n");
        return 1;
    }

    FILE  *srcfile; // source file << THIS LINE APPARENTLY IS WRONG
    long srclen; // source file size
    char *bf; …
Run Code Online (Sandbox Code Playgroud)

c splint

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

获取公开Goog​​le Docs文件的下载链接

阅读Google Docs API我发现:

下载

无法以最初上载文件的格式下载文件.文件的下载URL如下所示:

https://doc-04-20-docs.googleusercontent.com/docs/secure/m7an0emtau/WJm12345/YzI2Y2ExYWVm?h=16655626&e=download&gd=true
Run Code Online (Sandbox Code Playgroud)

给定一个公开的Google文档文件网址,比如说

https://docs.google.com/open?id=0B1-vl-dPgKm_NTNhZjZkMWMtZjQxOS00MGE1LTg2MjItNGVjYzdmZjYxNmQ5
Run Code Online (Sandbox Code Playgroud)

如何将其转换为下载链接?

python api google-docs

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

libpng从内存缓冲区加载文件

我试过查看libpng文档,但没找到我要找的东西.

我有一个完全在内存缓冲区中的PNG文件,如何加载此文件(除了创建临时文件的明显解决方案)?

不确定它是否相关,但我使用ctypes从Python调用libpng.

libpng

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

可能std :: vector中的元素有抛出析构函数吗?

当我查看Containercppreference 的要求时,它列出Destructible了一个要求value_type.这似乎意味着容器元素的析构函数可能不会抛出.

我无法在C++ 14标准中找到这个要求的引用(没有查看旧版本).我能找到的唯一的事情就是value_type必须是Erasable这并不意味着有任何异常安全的.

所以我的问题是,可能在std::vector一个抛出析构函数中的元素?如果没有,标准中的哪个部分禁止它?


PS:别担心,我不打算用抛出析构函数创建类型.我只是编写一个符合标准的实现,并试图获得异常安全权.

c++ standards-compliance

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

有没有办法加快进口?

我有一个需要的CLI应用程序sympy.CLI应用程序的速度很重要 - 它在用户反馈循环中使用了很多.

但是,简单地做import sympy 一整秒.这在紧密的反馈循环中变得异常烦人.无论如何在没有更改模块的情况下再次运行脚本时"预加载"或优化模块?

python performance module

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