ठीक है, इसलिए मैं एक मैट्रिक्स क्लास बनाने की कोशिश कर रहा हूं, और मैं वास्तव में, ब्रैकेट्स का उपयोग करके तत्वों को कॉल करने में सक्षम होना चाहता हूं। एममैट्रिक्स [x] [y] की शैली में।

तो मेरे पास एक vector<vector<T>> सदस्य है, और [] ऑपरेटर को ओवरलोड करते समय, मैं एक vector<T> ऑब्जेक्ट का संदर्भ देता हूं।

template<class T>
class Matrix
{
private:
    uint32_t DimensionHorizontal;
    uint32_t DimensionVertical;

    std::vector<std::vector<T>> matrix;

public:
    Matrix()
    {
        DimensionHorizontal = 10;
        DimensionVertical = 10;
    }

    std::vector<T>& operator[] (int index)
    {
        return matrix.[index];

    }

    Matrix(int x, int y)
    {
        DimensionHorizontal = x;
        DimensionVertical = y;
    }
};

ऐसा लगता है क्योंकि जब मैं मैट्रिक्स ऑब्जेक्ट बनाता हूं, और मैट्रिक्स [ए] [एन] (इस मामले में पूर्णांक का उपयोग करके) करके तत्व जोड़ने का प्रयास करता हूं, तो यह बिना किसी समस्या के संकलित होता है। मैं बाद में cout के साथ वहां संग्रहीत मूल्य को प्रिंट करने का प्रयास करता हूं।

रनटाइम के दौरान, मुझे निम्न त्रुटि मिलती है:

एक्सप्रेशन: वेक्टर सबस्क्रिप्ट वेक्टर की लाइन 1455 पर रेंज से बाहर है। 1455 लाइन पर:

_NODISCARD size_type capacity() const noexcept { // return current length of allocated storage
        auto& _My_data = _Mypair._Myval2;
        return static_cast<size_type>(_My_data._Myend - _My_data._Myfirst);
    }

    _NODISCARD _Ty& operator[](const size_type _Pos) noexcept { // strengthened
        auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
        _STL_VERIFY(
            _Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
#endif // _CONTAINER_DEBUG_LEVEL > 0

        return _My_data._Myfirst[_Pos];
    }

मैं इस बात को लेकर असमंजस में हूं कि ऐसा क्यों हो रहा है। मुझे पता है कि मैं सीमा से बाहर कुछ एक्सेस करने की कोशिश कर रहा हूं, या कुछ अन्यथा अवैध कर रहा हूं, लेकिन मैट्रिक्स [] को एक वेक्टर वापस करना चाहिए, और मुझे तत्व टी (इस मामले में int) तक पहुंचने के लिए फिर से [] का उपयोग करने में सक्षम होना चाहिए, किसी भी सहायता की सराहना की जाएगी।

संपादित करें:

इस प्रकार मैं कक्षा का उपयोग करता हूं

int main()
{
    Matrix<int> a(10, 10);
    a[0][0] = 10;
    std::cout << a[0][0];
    return 0;
}
0
bari eune 1 पद 2019, 18:06

1 उत्तर

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

तर्क के रूप में पारित आकार से मेल खाने के लिए आपको अपने कन्स्ट्रक्टर में मैट्रिक्स का आकार बदलना होगा।

 Matrix(int x, int y) : matrix(x)
 {
    for( auto& sub : matrix ) {
       sub.resize(y);
    }
    DimensionHorizontal = x;
    DimensionVertical = y;
 }
1
Thomas 1 पद 2019, 18:35