相关疑难解决方法(0)

我为什么要使用新的展示位置?

看起来,placement new在预分配的内存上创建一个新对象,这是否意味着它需要更少的时间?看起来它比使用旧普通分配更快new.那么,如果这样方便快捷,为什么不一直使用placement new

c++ placement-new new-operator

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

C/C++中的运算符与函数

最近有人问我C++标准运算符(例如new,delete,sizeof)和函数(例如tan,free,malloc)之间的区别."标准"是指编译器套件默认提供的,而不是用户定义的.以下是我给出的答案,但似乎都不令人满意.

(1)运营商不需要包含任何标头来使用它:例如,您可以拨打新电话而不包括任何标题.但是,函数(比如free())确实需要包含头文件,强制执行.

(2)运算符在标准头中的某处定义为(即类操作符).功能不是.

你能批评这些答案并让我更好地了解它们之间的区别吗?

c++

11
推荐指数
2
解决办法
5100
查看次数

为什么new不需要对指针进行强制转换,即使malloc需要它?

<new>标题中new的定义是:

 void* operator new(size_t);
Run Code Online (Sandbox Code Playgroud)

malloc的定义如下:

 void* malloc(size_t);
Run Code Online (Sandbox Code Playgroud)

现在,由于C++是一种强类型语言,它需要程序员的强制转换才能将void*指针转换为程序员所需的类型...在malloc中,我们必须执行强制转换,但不是新的,尽管两者都返回一个void*指针.为什么?

c++ malloc new-operator

11
推荐指数
2
解决办法
357
查看次数

我应该如何在C++中转换malloc的结果?

请注意,这个问题与C++ malloc中的C或mallocvs new/ smart指针无关.

如果我malloc在C++中使用,我应该使用什么样的演员?以下所有工作.

int *a = (int *)malloc(sizeof (int));
int *b = static_cast<int *>(malloc(sizeof (int)));
int *c = reinterpret_cast<int *>(malloc(sizeof (int)));
Run Code Online (Sandbox Code Playgroud)

实例:http: //ideone.com/lzfxcm

我更喜欢尽可能在代码中使用C++样式转换,我希望采用安全的编码习惯.请记住这一点.

谢谢.

c++

9
推荐指数
2
解决办法
3888
查看次数

在c ++中使用Adjacency List的图表

我试图用C++实现一个图形.我使用包含两个变量的结构来表示图中的节点 -
a)一个整数,用于包含有关节点的一些信息.
b)包含与其连接的其他顶点的索引的列表.
以下是代码.

// Graphs using adjacency list

#include <iostream>
#include <list>
#include <cstdlib>
using namespace std;

// structure to represent a vertex(node) in a graph
typedef struct vertex{
    int info;
    list<int> adj;   // adjacency list of edges contains the indexes to vertex
} *vPtr;             

int main(){
    vPtr node = (vPtr)malloc(sizeof(struct vertex));
    node->info = 34;            // some arbitrary value
    (node->adj).push_back(2);   // trying to insert a value in the list
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码正在编译正常,但是当我推回列表中的元素时,我遇到了运行时错误.我的结构有什么问题吗?
我正在使用代码块和GNU GCC,C++ 98编译器来编译我的代码.

c++ structure graph list adjacency-list

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

c数组:动态设置大小?

我是C编程的新手.我试图使用变量设置数组的大小,但我收到一个错误:"数组"的存储大小不是恒定的!

01 int bound = bound*4;

02 static GLubyte vertsArray[bound];
Run Code Online (Sandbox Code Playgroud)

我注意到当我用数字'20' 替换边界(在02行的括号内)时,程序将运行没有问题.但我试图动态设置数组的大小...

任何想法为什么我收到此错误?非常感谢,

c arrays

6
推荐指数
2
解决办法
1704
查看次数

C++:malloc是否相当于new?

可能重复:
new/delete和malloc/free有什么区别?

大家好我是c ​​++的菜鸟,想知道是否

memblock = (char *)malloc( currentByteLength); 
Run Code Online (Sandbox Code Playgroud)

相当于

memblock = new char[currentByteLength]
Run Code Online (Sandbox Code Playgroud)

在c ++中.

c++

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

如何排序指向结构的向量

我正在尝试对concurrent_vector类型进行排序,其中hits_object:

struct hits_object{
        unsigned long int hash;
        int position;
};
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

concurrent_vector<hits_object*> hits;

for(i=0;...){
    hits_object *obj=(hits_object*)malloc(sizeof(hits_object));
    obj->position=i;
    obj->hash=_prevHash[tid];
    hits[i]=obj;
}
Run Code Online (Sandbox Code Playgroud)

现在我已经填满了一个concurrent_vector<hits_object*>电话hits.

但我想在position属性上对这个concurrent_vector进行排序!

以下是典型命中对象内部的示例:

0 1106579628979812621
4237 1978650773053442200
512 3993899825106178560
4749 739461489314544830
1024 1629056397321528633
5261 593672691728388007
1536 5320457688954994196
5773 9017584181485751685
2048 4321435111178287982
6285 7119721556722067586
2560 7464213275487369093
6797 5363778283295017380
3072 255404511111217936
7309 5944699400741478979
3584 1069999863423687408
7821 3050974832468442286
4096 5230358938835592022
8333 5235649807131532071
Run Code Online (Sandbox Code Playgroud)

我想根据第一列(类型的"位置" int)对此进行排序.第二列是类型的"哈希" unsigned long int.

现在我尝试做以下事情:

std::sort(hits.begin(),hits.end(),compareByPosition);

其中compareByPosition定义为:

int compareByPosition(const void …
Run Code Online (Sandbox Code Playgroud)

c++ sorting struct

5
推荐指数
3
解决办法
2932
查看次数

什么是C++中的动态内存分配?

我学习用C动态内存分配++和关键字newnew[]被提及.据说,用户可以在运行时指定内存分配的大小,而不像在源代码中声明一个具有固定大小的变量或数组.

我不明白这个概念.它是如何工作的?我只需要澄清这个想法,一个例子会有所帮助!

c++ malloc memory-management new-operator dynamic-allocation

4
推荐指数
2
解决办法
3788
查看次数

动态内存分配,C++

我需要编写一个可以读取文件的函数,并将所有唯一的单词添加到动态分配的数组中.我知道如何创建一个动态分配的数组,例如,如果你要求数组中的条目数:

int value;
cin >> value;
int *number;
number = new int[value];
Run Code Online (Sandbox Code Playgroud)

我的问题是我提前不知道文件中有多少个独特的单词,所以我最初不能只读取值或要求它.此外,我需要使用数组,而不是向量.有没有办法使用动态分配的数组执行类似于push_back的操作?

现在,我唯一能想到的就是首先创建一个存储文件中所有单词的数组(1000),然后让它通过它并找到唯一单词的数量.然后使用该值创建一个动态分配的数组,然后我再次通过该数组来存储所有唯一的单词.显然,对于应该有更有效解决方案的东西来说,这个解决方案听起来非常落伍.

有人能指出我正确的方向,是否有更好的方法?我觉得这对矢量来说相当容易,所以我认为要求它成为一个数组是有点愚蠢的(除非在这个家庭作业中需要了解动态分配数组的一些重要事项).

编辑:这是另一个问题.我知道文件中会有1000个单词,但我不知道会有多少个单词.这是一个想法.我可以创建一个1000个元素的数组,将所有独特的单词写入该数组,同时跟踪我已完成的数量.完成后,我可以配置一个动态分配带有该计数的新数组,然后将这些单词从初始数组复制到第二个数组.不确定这是否最有效,但由于我们无法使用向量,我认为效率不是这项任务中的一个重要问题.

c++ arrays vector

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