小编Que*_*est的帖子

填充vector <int>*

我正在学习C++,我遇到了这个函数的问题.我最初传递了整个向量,然后传递了一个指向向量的指针; 但我似乎无法从指向矢量的指针赋值.

void fill(std::vector<int> *vec, const int startVal)
{
    const int n = vec->size();
    for (int i = 0; i < n; ++i)
    {
        vec[i] = startVal + i
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在指针(vec)的第i个位置为向量分配值?

我试过了:

vec->[i] = startVal + i;
Run Code Online (Sandbox Code Playgroud)

c++ vector stdvector

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

std :: vector <struct>到const std :: vector <const struct>*

我有私有变量std::vector<some struct>可以我以某种方式将向量传递给函数返回值,但没有"写"访问权限,因此您将无法向其中添加新元素,并且您将无法修改元素(例如const std::vector<some const struct>*,我怎么能这样做?我唯一的想法就是创建一个带有常量指针的新向量.有更好的解决方案吗?

c++ vector

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

禁用operator =和复制构造函数

有没有办法禁用operator =和复制构造函数,并允许std::move()只使用?我知道我能做到

foo& operator= (const foo&) = delete;
foo(const foo&) = delete;
Run Code Online (Sandbox Code Playgroud)

但这也会禁用std :: move.

我想要的是阻止复制此类 并仅允许foo foo2 = std::move(foo1);

顺便说一句.我有私人构造.

c++

0
推荐指数
1
解决办法
147
查看次数

AND运算符+加法比减法更快

我已经测量了以下代码的执行时间:

volatile int r = 768;
r -= 511;

volatile int r = 768;
r = (r & ~512) + 1;
Run Code Online (Sandbox Code Playgroud)

部件:

mov     eax, DWORD PTR [rbp-4]
sub     eax, 511
mov     DWORD PTR [rbp-4], eax

mov     eax, DWORD PTR [rbp-4]
and     ah, 253
add     eax, 1
mov     DWORD PTR [rbp-4], eax
Run Code Online (Sandbox Code Playgroud)

结果:

Subtraction time: 141ns   
AND + addition: 53ns
Run Code Online (Sandbox Code Playgroud)

我已经多次运行代码片段并且结果一致.
有人可以解释一下,为什么会出现这种情况,甚至还有一个AND +添加版本的组装线?

c++ assembly execution-time

0
推荐指数
1
解决办法
653
查看次数

调用“shared_from_this”时错误的weak_ptr

我组建了一个小类,继承自std::enable_shared_form_this如下:

class Foo : std::enable_shared_from_this<Foo>
{
    Foo() = default();
public:
    [[nodiscard]] static auto getInstance()
    {
        static auto f = std::shared_ptr<Foo>(new Foo());
        return f;
    }

    stream construct()
    {
        return stream{ shared_from_this() };
    }
};
Run Code Online (Sandbox Code Playgroud)

每当我打电话时construct()bad_weak_ptr exception都会被抛出。谁能解释为什么我会观察到这种行为?

编译:Apple clang 版本 13.0.0 (clang-1300.0.29.30)
目标:arm64-apple-darwin21.5.0

c++ shared-ptr

0
推荐指数
1
解决办法
113
查看次数

无法从'unsigned int*'转换为'LPDWORD'

我有以下代码:

size_t lufread(void *ptr,size_t size,size_t n,LUFILE *stream)
{ 
    unsigned int toread = (unsigned int)(size*n);
    if (stream->is_handle)
    { 
        DWORD red; 
        BOOL res = ReadFile(stream->h,ptr,toread,&red,NULL);
        if (!res) 
            stream->herr=true;
        return red/size;
    }
    if (stream->pos+toread > stream->len) 
        toread = stream->len-stream->pos;
    memcpy(ptr, (char*)stream->buf + stream->pos, toread); 
    DWORD red = toread;
    stream->pos += red;
    return red/size;
}
Run Code Online (Sandbox Code Playgroud)

这是编译器错误:

error C2664: 'ReadFile' : cannot convert parameter 4 from 'unsigned int *' to 'LPDWORD'
Run Code Online (Sandbox Code Playgroud)

我不明白,因为DWORD red是相同unsigned long red
所以在函数ReadFile()第四个参数&red应该是unsigned long …

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

-1
推荐指数
1
解决办法
3458
查看次数

C++ 将 std 列表拆分为两个列表

嘿,所以我对 C++ 相当陌生,我遇到了这个问题,我想将一个字符串的 std 列表拆分为两个列表。

例如:list(1,2,3,4)->list1(1,2) & list2(3,4)

我想splice这就是我应该使用的,但我根本不明白它是如何工作的......

有人可以建议我如何做到这一点吗?
抱歉我的英语不好,感谢大家的帮助。

c++ list std

-1
推荐指数
1
解决办法
9065
查看次数

获取字符串的第一个字符

标题基本概括了所有内容.我想知道如何将一个字符串转换为char.任何帮助表示赞赏!

c++ string char

-3
推荐指数
1
解决办法
789
查看次数

标签 统计

c++ ×8

vector ×2

assembly ×1

c++11 ×1

char ×1

execution-time ×1

list ×1

shared-ptr ×1

std ×1

stdvector ×1

string ×1

visual-c++ ×1