小编Anu*_*hke的帖子

C++中make_shared和普通shared_ptr的区别

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
Run Code Online (Sandbox Code Playgroud)

许多google和stackoverflow帖子就在这里,但我无法理解为什么make_shared比直接使用更有效shared_ptr.

有人可以一步一步解释我创建的对象序列和两者所做的操作,这样我就能理解make_shared效率如何.我在上面给出了一个例子供参考.

c++ shared-ptr c++11

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

数字中设置的位数

以下是一个神奇的公式,它给出了一个数字中设置的位数(汉明重量).

/*Code to Calculate count of set bits in a number*/
int c;
int v = 7;
v = v - ((v >> 1) & 0x55555555);                    // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333);     // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
printf(" Number of Bits is %d",c);
/*-----------------------------------*/
Run Code Online (Sandbox Code Playgroud)

来自:http: //graphics.stanford.edu/~seander/bithacks.html

有谁能解释一下这背后的理由?

c c++ bit-manipulation bitmap bit

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

找到第一个独特元素

我在采访中遇到了这个问题,我无法回答.您必须在数组中找到第一个唯一元素(整数).例如:

3,2,1,4,4,5,6,6,7,3,2,3
Run Code Online (Sandbox Code Playgroud)

然后,独特的元素是1, 5, 7第一个独特的1.

解决方案要求:

O(n)时间复杂度.

O(1)空间复杂性.

我试着说:

使用Hashmaps,Bitvector ......但它们都没有空间复杂度O(1).

谁能告诉我空间O(1)的解决方案?

sorting algorithm search time-complexity data-structures

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

VIM:删除文件中所有行的特定单词之前的所有字符

我需要一个vim命令来删除文件中所有行的特定单词之前的所有字符

例如: 输入:

asdfasdfasdfscccHello

qwerqwerHello

24351243vsfgertHello

输出:

你好

你好

你好

vim

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

尽管有无限的ulimit,为什么非常大的堆栈分配会失败?

以下静态分配给出了分段错误

double U[100][2048][2048];
Run Code Online (Sandbox Code Playgroud)

但是下面的动态分配很顺利

double ***U = (double ***)malloc(100 * sizeof(double **));

for(i=0;i<100;i++)
{
    U[i] = (double **)malloc(2048 * sizeof(double *));
    for(j=0;j<2048;j++)
    {
        U[i][j] = (double *)malloc(2048*sizeof(double));
    }
}
Run Code Online (Sandbox Code Playgroud)

ulimit在linux中设置为无限制.

有人能给我一些关于发生什么的暗示吗?

c linux memory-management

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

编译时错误与运行时错误

我很困惑为什么编译器给出

const char s[]="hello";
s[2]='t';                 // Compile Time Error

char *t = "hello";
*(t+2)='u';              // Run time Error
Run Code Online (Sandbox Code Playgroud)

我想在这两种情况下编译器都应该给出编译时错误.任何人都可以告诉我这种方式的特殊原因吗?

c c++

5
推荐指数
2
解决办法
2731
查看次数

cdev_add()实际做什么?在将设备注册到内核方面

什么是cdev_add()真正做到?我在问向内核注册设备的条款。

是否在某些映射中添加了指向cdev结构的指针,该映射由主数和次数索引?当您说设备已在内核中添加/注册时,这是如何发生的。我想知道cdev_add采取什么步骤在运行的内核中注册设备。我们使用mknod命令为用户空间创建一个节点。即使此命令也使用主号和副号映射。注册也做类似的事情吗?

kernel linux-device-driver linux-kernel

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

C++的向量元素的顺序

下面的c ++代码给出了

int main()
{
    vector <int> myvect(3,0);
    vector <int> :: iterator it;
    it = myvect.begin();
    myvect.insert(it,200);
    myvect.insert(it+5,400);         //Not sure what 5 makes the difference here
    cout << myvect[0] << endl << myvect[1];
}
Run Code Online (Sandbox Code Playgroud)

输出:

200
400
Run Code Online (Sandbox Code Playgroud)

并且相同的代码有微小的变化

int main()
{
    vector <int> myvect(3,0);
    vector <int> :: iterator it;
    it = myvect.begin();
    myvect.insert(it,200);
    myvect.insert(it+4,400);         //Not sure what 4 makes the difference here
    cout << myvect[0] << endl << myvect[1];
}
Run Code Online (Sandbox Code Playgroud)

输出:

400
200
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么在迭代器中添加4或5会改变元素的顺序吗?

谢谢

c++ vector

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

如何在OpenMp中管理共享变量

我正在尝试编写一个OpenMp程序.我有一个for循环,迭代100次.我把它分成10个线程.每个线程运行10次迭代并根据某些条件生成一些计数.因此,根据这个逻辑,每个线程将生成自己的计数.

我想要的只是将此计数复制到一个变量,该变量将保存所有线程中所有计数的总和.如果我们让这个变量(共享)在循环中写入,我猜它会序列化线程.我只想将每个线程的最后一个计数复制到一个全局变量中.这样我将只序列化10个赋值语句.我尝试使用,lastprivate但我对如何使用它满足我的要求感到困惑.

这是我的代码

#pragma omp parallel for private(i) schedule(dynamic) shared(count)
for (i = 1; i <= 100 ; i++)
{
    if(i%2==0)
        count++; 
}
printf("Total = %d \n", count);
Run Code Online (Sandbox Code Playgroud)

c c++ multithreading openmp

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

(Typecasting到Constant Literal)为什么这个C程序的输出

#include <stdio.h>

struct bar
{
    int data[10];
};


int main(void) {
    printf("%d", ((struct bar*)0)+5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是200.我在一些c编程网站上看到了这个.有人可以解释一下吗?

c

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

编译器重新排序Unamed结构

struct unaming
{
    char f;
    double dd;

    struct 
    {
    int data;
    char c;
    double d;
    };
};
Run Code Online (Sandbox Code Playgroud)

我期待这个结构的大小为40个字节.但编译器返回32个字节.我期待以下布局.

[char f] [7 bytes] [double dd] [int data] [4 bytes] [char c] [7bytes] [double d] = 40

这是基于结构及其成员变量将与最大尺寸数据类型对齐的规则.

但看起来Compiler重新命令了unamed结构化.是这样的吗?为何32字节?

c c++

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

用于shared_ptr &lt;&gt;的自定义删除器,给出“无上下文错误”

#include <memory>
#include <iostream>
using namespace std;
class A
{
    public:
    int val;
    void deleter(A *x)
    {
        cout << "In Delete" << endl;
    }

    void push_back(int val)
    {
        shared_ptr<A> temp = (new int(val),deleter);
        cout << temp.use_count() << endl;
    }

};


int main()
{
    A a;
    a.push_back(11);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误。

test.cpp: In member function 'void A::push_back(int)':
test.cpp:17:44: error: no context to resolve type of '((A*)this)->A::deleter'
         shared_ptr<A> temp = (new int(val),deleter);
Run Code Online (Sandbox Code Playgroud)

总的来说,我正在尝试为shared_ptr实现一个自定义删除器,这是嵌套类的成员函数,并且遇到了可怕的C ++错误。所有的google例子都是deleter是全局函数的例子。

我在这里想念什么?

建议1:基于第一个建议,我改为以下内容。

class A;
    void deleter(A *a) …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

在C中分离分数和整数

我需要将整数和小数部分与小数分开,如4.343.

我们在C/C++中是否有任何函数给出小数点的位置.在得到之后我想我们可以使用atoi函数转换为数字.

谢谢!

c c++

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