2012-09-14 18 views
2

这是一个非常愚蠢的问题,但在这里不用...如何在类中使用数组变量? C++

我有这个代码的类:

class ArraySection { 
public: 
    unsigned char *array; 
    int start, stop, k; 
}; 

所有我想要做的就是在创建这个类的一个实例我的主要功能。我想这个做(其中长& n为预定义的):

ArraySection *ASarrayPrimes = nullptr; 
ASarrayPrimes->array[length]; 
ASarrayPrimes->start = stop; 
ASarrayPrimes->stop += length; 
ASarrayPrimes->k = 0; 

,但我想这是不这样做的正确方法...?我们从来没有在课堂上真正讲过。 (如果你想知道,我应该使用线程来并行化筛选算法来查找素数。)我想要做的是将大量数组分解,将其分解为更小的数组(使用此ArraySection创建由教授给出的类),然后有线程在这些单独的较小的线程中寻找素数。

编辑:我不能改变班级,伙计们。我只能跟教授给的东西一起工作。

+0

你是什么* *预定在*其中长度&N是预定义的*的意思。另请注意,数组不是指针,指针也不是数组。 –

+1

在你的课程中,你正在学习线程,然后再学习数组,向量,类等。哇。 – john

回答

0

你所做的只是把一个指针放在你的课堂上。把一个数组,你可以这样:

class ArraySection { 
public: 
    unsigned char array[100]; 
    int start, stop, k; 
}; 
2

你永远不会为你的对象分配任何内存。分配内存new,或保留在堆栈上。

您可以使用任一选项在类中分配数组。

ArraySection *ASarrayPrimes = new ArraySection; // On the heap 
ASarrayPrimes->array = new char[SIZE]; // New character array on the heap 
delete [] ASarrayPrimes->array; 
delete ASarrayPrimes; // Make sure you free the memory 

ArraySection ASarrayPrimes; // On the stack 
ASarrayPrimes.array = new char[SIZE]; // New character array on the heap 

只要确保你的内存也免费的array!更安全的方法是使用std::vector<char>或者确实如此。一个std::string而不是成员char* array,因为这些将为您处理分配/释放。

0

考虑:

class ArraySection { 
public: 
    string str; // or vector<type> for the type of the number 
    int start; 
    int stop; 
    int k; 
}; 

这样就避免了所有的阵列业务和错误。

如果需要,可以访问str.c_str()以只读方式访问C字符串中的数据,但是您不必担心实际长度。

0

看看this tutorial来学习C++。

但是,为了回答你的问题,有2种方式来分配你的对象的内存:

1-分配在栈上:

ArraySection arrayInstance; 

2或堆上:

ArraySection *arrayInstance = new ArraySection(); 

然后你需要分配内存给unsigned char *array变量;

1-

arrayInstance.array = new unsigned char[1234]; 

2-

arrayInstance->array = new unsigned char[1234]; 
相关问题