Create an Array of vectors in C++

安稳与你 提交于 2021-01-29 05:37:49

问题


I want to create a distance matrix of a big dataset, and only want to store the 'close' enough elements. The code reads like this

vector<double> * D; 
D = (vector<double> *) malloc(dim *sizeof(vector<double>) ) ;

for(i=0;i<dim;i++){
    for(j=i+1;j<dim;j++){
        dx = s[j][0] - s[i][0];
        dy = s[j][1] - s[i][1];
        d =   sqrt( dx*dx + dy*dy );
        if(d  < MAX_DISTANCE){
            D[i].push_back(d);
            D[j].push_back(d);
            }
        }

which gives me segmentation fault. I guess I have not defined the array of vector correctly. How do I get around this ?


回答1:


In C++ you should never allocate object (or arrays of objects) using malloc. While malloc is good at allocating memory, that's all it does. What it doesn't do is calling constructors which means all your vector objects are uninitialized. Using them will lead to undefined behavior.

If you want to allocate an array dynamically you must use new[]. Or, better yet, use std::vector (yes, you can have a vector of vectors, std::vector<std::vector<double>> is fine).


Using the right vector constructor you can initialize a vector of a specific size:

// Create the outer vector containing `dim` elements
std::vector<std::vector<double>> D(dim);

After the above you can use the existing loops like before.



来源:https://stackoverflow.com/questions/36497674/create-an-array-of-vectors-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!