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效率如何.我在上面给出了一个例子供参考.
以下是一个神奇的公式,它给出了一个数字中设置的位数(汉明重量).
/*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
有谁能解释一下这背后的理由?
我在采访中遇到了这个问题,我无法回答.您必须在数组中找到第一个唯一元素(整数).例如:
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)的解决方案?
我需要一个vim命令来删除文件中所有行的特定单词之前的所有字符
例如: 输入:
asdfasdfasdfscccHello
qwerqwerHello
24351243vsfgertHello
输出:
你好
你好
你好
以下静态分配给出了分段错误
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中设置为无限制.
有人能给我一些关于发生什么的暗示吗?
我很困惑为什么编译器给出
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)
我想在这两种情况下编译器都应该给出编译时错误.任何人都可以告诉我这种方式的特殊原因吗?
什么是cdev_add()真正做到?我在问向内核注册设备的条款。
是否在某些映射中添加了指向cdev结构的指针,该映射由主数和次数索引?当您说设备已在内核中添加/注册时,这是如何发生的。我想知道cdev_add采取什么步骤在运行的内核中注册设备。我们使用mknod命令为用户空间创建一个节点。即使此命令也使用主号和副号映射。注册也做类似的事情吗?
下面的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会改变元素的顺序吗?
谢谢
我正在尝试编写一个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) #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编程网站上看到了这个.有人可以解释一下吗?
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字节?
#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) 我需要将整数和小数部分与小数分开,如4.343.
我们在C/C++中是否有任何函数给出小数点的位置.在得到之后我想我们可以使用atoi函数转换为数字.
谢谢!