小编Chr*_*phe的帖子

将shared_ptr设置为new_pointer,即old_pointer + offset

这是一个智能指针:std::shared_ptr<char> p(new char[size])表示填充原始二进制文件内容的数组.在整个数组从文件复制到RAM之后(并且仅在之后),我可以解析它,在此期间我检索一些头信息(几个第一个dwords).然后是实际数据.

在没有提供更多上下文的情况下,将所提到的共享指针设置为实际数据开头的新地址非常方便.该地址仍处于已分配的内存中.但如何设置而不失去它?

一个问题是(是/否):是否可以设置p偏移主流指针,而无需调用数据删除?

c++ smart-pointers shared-ptr pointer-arithmetic

30
推荐指数
1
解决办法
1037
查看次数

在C++中删除多余的空格

我试着编写一个删除多余空格的脚本,但我没有设法完成它.

基本上我想转变abc sssd g g sdg gg gfabc sssd g g sdg gg gf.

在PHP或C#等语言中,它很容易,但在C++中却没有,我知道.这是我的代码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <unistd.h>
#include <string.h>

char* trim3(char* s) {
    int l = strlen(s);

    while(isspace(s[l - 1])) --l;
    while(* s && isspace(* s)) ++s, --l;

    return strndup(s, l);
}

char *str_replace(char * t1, char * t2, char * t6)
{
    char*t4;
    char*t5=(char *)malloc(10);
    memset(t5, 0, 10);
    while(strstr(t6,t1))
    {
        t4=strstr(t6,t1);
        strncpy(t5+strlen(t5),t6,t4-t6);
        strcat(t5,t2);
        t4+=strlen(t1);
        t6=t4;
    }

    return …
Run Code Online (Sandbox Code Playgroud)

c++ string algorithm

16
推荐指数
3
解决办法
2万
查看次数

std :: initializer_list {x,y,z}(CTAD)有效吗?

std::initializer_list<U>显式构造时,可以U推导出模板参数()(例如,使用类模板参数推导(CTAD))吗?

换句话说,我知道以下语句是有效的:

std::initializer_list<int> x1{1, 2, 3};
std::initializer_list<int> x2 = {1, 2, 3};
auto x3 = std::initializer_list<int>{1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

但是以下陈述也有效吗?

std::initializer_list x1{1, 2, 3};
std::initializer_list x2 = {1, 2, 3};
auto x3 = std::initializer_list{1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

编译器不同意是否std::initializer_list可以推导的模板参数:

#include <initializer_list>

struct s {
    s(std::initializer_list<int>);
};

void f() {
    std::initializer_list x1{1, 2, 3};         // Clang ERROR; GCC OK;    MSVC OK
    std::initializer_list x2 = {1, 2, 3};      // Clang ERROR; GCC OK;    MSVC OK
    auto x3 = std::initializer_list{1, …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++17

16
推荐指数
1
解决办法
252
查看次数

使用位集和共享静态数组将std :: set专门用于(u)int8和chars是否合法

这主要是语言律师的问题,我怀疑大多数实现都会麻烦,特别是因为这可能会增加每个用户的编译时间。

话虽如此:如果对std :: set的某些实现是针对每个实例和共享的256个值的静态数组使用位集实现的(由于键为const,这是安全的),根据该标准,这是否合法?

c++ stl set bitset language-lawyer

16
推荐指数
1
解决办法
244
查看次数

std :: locale/std :: facet关键部分

出于好奇.在过去,我已经看到了功能性能下降喜欢boost::to_lower的,因为CriticalSection在使用std::use_facet时,小懒分配.据我记得,有一个全局锁定区域设置的错误,但根据Stephan Lavavej,它已在VS2013中修复.瞧,昨天我看到了锁定服务器性能的方面,所以我想我混淆了两个不同的问题.
但首先,为什么有一个CriticalSection懒惰的方面呢?显然它会破坏性能.为什么他们没有决定对指针进行某种可升级的锁定或原子操作?

c++ multithreading locale visual-c++

13
推荐指数
1
解决办法
658
查看次数

是否有一个商定的UML图表样式用于记录或说明(Docker)容器在系统架构规范中的作用?

我打算绘制一些UML结构图,说明Docker图像(或部署图中的容器)在我构建的软件的整体结构中的位置.我有兴趣说明容器的内容,网络端口和其他接口的映射以及多个容器互操作的方式.

我的问题空间是分布式,基于事件的系统(DEBS),所以我希望我的大多数容器都有消息队列进出.我的架构的另一部分涉及使用内存数据网格,该网格跨越集群中多个节点的多个容器.

如何用UML建模?如果不能,UML是否有计划解决此类分发问题?

architecture documentation uml distributed-computing docker

11
推荐指数
1
解决办法
4201
查看次数

cout << setw与åäö没有正确对齐

以下代码重现了我的问题:

#include <iostream>
#include <iomanip>
#include <string>

void p(std::string s, int w)
{
   std::cout << std::left << std::setw(w) << s;
}

int main(int argc, char const *argv[])
{
   p("COL_A", 7);
   p("COL_B", 7);
   p("COL_C", 5);
   std::cout << std::endl;
   p("ABC", 7);
   p("ÅÄÖ", 7);
   p("ABC", 5);
   std::cout << std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

COL_A  COL_B  COL_C
ABC    ÅÄÖ ABC
Run Code Online (Sandbox Code Playgroud)

如果我将代码中的"ÅÄÖ"更改为例如"ABC",那么它的工作原理如下:

COL_A  COL_B  COL_C
ABC    ABC    ABC  
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c++ character-encoding iomanip c++11

10
推荐指数
2
解决办法
850
查看次数

可以打开小的ASCII文件,但不能打开大的二进制文件吗?

我使用以下代码在Windows上的MSVC中打开一个大型(5.1GB)二进制文件.机器有足够的RAM.问题是长度被检索为零.但是,当我将file_path更改为较小的ASCII文件时,代码工作正常.

为什么我不能加载大型二进制文件?我更喜欢这种方法,因为我想要一个指向文件内容的指针.

FILE * pFile;
uint64_t lSize;
char * buffer;
size_t result;

pFile = fopen(file_path, "rb");
if (pFile == NULL) { 
    fputs("File error", stderr); exit(1); 
}

// obtain file size:
fseek(pFile, 0, SEEK_END);
lSize = ftell(pFile);                                // RETURNS ZERO
rewind(pFile);

// allocate memory to contain the whole file:
buffer = (char*)malloc(sizeof(char)*lSize);
if (buffer == NULL) {
    fputs("Memory error", stderr); exit(2); 
}

// copy the file into the buffer:
result = fread(buffer, 1, lSize, pFile);             // RETURNS ZERO TOO
if (result …
Run Code Online (Sandbox Code Playgroud)

c c++ file large-files c++11

10
推荐指数
1
解决办法
336
查看次数

如何在 UML 序列图中对并行线程建模

如何建模对序列图中的对象执行操作的两个并行线程?

multithreading uml sequence-diagram

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

范围解析运算符被使用两次

namespace libzerocoin {

//Commitment class
Commitment::Commitment::Commitment(const IntegerGroupParams* p,
                               const Bignum& value): params(p), contents(value) {
this->randomness = Bignum::randBignum(params->groupOrder);
this->commitmentValue = (params->g.pow_mod(this->contents, params->modulus).mul_mod(
                         params->h.pow_mod(this->randomness, params->modulus), params->modulus));
}
Run Code Online (Sandbox Code Playgroud)

我刚刚在GitHub上遇到过这个函数定义.

我假设第二个和第三个"承诺"引用了类名和构造函数,但我无法弄清楚第一个的含义.我确信它没有引用命名空间,因为该名称不同.我已经看到范例解析运算符在示例中被使用了两次,但那些引用了嵌套的命名空间.

c++ constructor namespaces class name-lookup

10
推荐指数
1
解决办法
520
查看次数