यह प्रश्न सरल हो सकता है लेकिन मैं कभी भी सी ++ में कच्चे पॉइंटर्स या सरणी का उपयोग नहीं करता हूं इसलिए ...

मुझे लाइब्रेरी फ़ंक्शन का उपयोग करने की ज़रूरत है जो इस तरह दिखता है:

void f(double a[3][3], double b[3], double c[3]);

a और b इनपुट के लिए उपयोग किए जाते हैं और परिणाम c में संग्रहीत किया जाता है।

a की गणना थोड़ी जटिल है, लेकिन कभी नहीं बदलती है, इसलिए यह केवल एक बार गणना करने और परिणाम को बचाने के लिए समझ में आता है। अपने प्रोग्राम में, मैं इसे X प्रकार के ऑब्जेक्ट से लिंक कर सकता हूं।

class X{
public:
X(){ 
    a = {{1,2,3},
         {4,5,6},
         {7,8,9}}; 
    }

private:
    double a[3][3];
}

मैं X::a के लिए एक गेटर कैसे लिख सकता हूं जिसका उपयोग f फ़ंक्शन में किया जा सकता है?

इस प्रकार मैं फ़ंक्शन f को कॉल करना चाहता हूं:

#include "X.h"

int main(int argc, char *argv[]){

    X o = X(); //create object
    double a[3][3] = o.getA(); // I want to get a somehow
    double b[3] =  {1,2,3}; // create dummy b
    double c[3] = {}; // create empty c
    f(a,b,c); // call funktion to populate c
    for(int i=0; i<3; ++i){
        std::cout << c[i] << endl;
    }
}
3
user7431005 29 जून 2018, 11:42

2 जवाब

सबसे बढ़िया उत्तर

आप जानते हैं कि std::vector C++ में 2D सरणियों के लिए जाने का तरीका है , लेकिन यदि आप जिस बाधा का सामना कर रहे हैं उसे बाईपास नहीं कर सकते हैं, तो मैट्रिक्स को गेटटर फ़ंक्शन के पैरामीटर के रूप में पास करना संभव होगा, जैसे:

#include <iostream>

class X {
 public:
    void getA(double (&array)[3][3]) {
        for (int i = 0; i < 3; ++i)
            for (int j = 0; j < 3; ++j)
                array[i][j] = a[i][j];
    }
 private:
    double a[3][3] = {{1,2,3},
            {4,5,6},
            {7,8,9}};
};

int main(void) {
    X o = X();
    double a[3][3];
    o.getA(a);
    for(int i = 0; i < 3; ++i)
        for(int j = 0; j < 3; ++j)
            std::cout << a[i][j] << std::endl;
    return 0;
}
3
gsamaras 29 जून 2018, 12:26

इस स्निपेट को आपके उद्देश्य की पूर्ति करनी चाहिए।

#include <iostream>
#include <string>

using namespace std;

class X {
public:
    X() {
    }

    typedef double (*ptr_matrix)[3];

    ptr_matrix getA(){
        return a;
    }

private:
    double a[3][3] = {{ 1,2,3},
        {4,5,6},
        {7,8,9}};
};

void f(double a[3][3], double b[3], double c[3])
{
    cout<<"Inside f function";
    for(auto i = 0; i < 3;i++) {
        cout<<endl;
        for(auto j = 0 ; j < 3;j++)
            cout<<a[i][j];
    }
}

int main()
{
    X o = X(); //create object
    double (*a)[3] = NULL;
    a = o.getA(); // I want to get a somehow

    double b[3] = {0};
    double c[3] = {0};

    f(a,b,c);

}
0
yadhu 29 जून 2018, 13:16