【问题标题】:no match for 'operator=' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >'operator=' 不匹配(操作数类型是 '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >
【发布时间】:2020-07-01 22:15:09
【问题描述】:

我是 C++ 新手。我正在尝试制作指向包含字符的二维动态数组的指针的二维动态数组(向量)。我需要了解逻辑,因为我想在分配的项目中实现它。我的指针基础很薄弱。enter image description here

#include<vector>
#include <iostream>


using namespace std;

vector<vector<int>> *  pointer;
int matX = 2;
int matY = 2;



void mkPMat(vector<vector<int>> &);
void update();




int main(){

    vector<vector<int>> arr;
    int a;

    for(int i =0; i<matX; i++){
        vector<int> temp;
        for(int j =0; j<matY; j++){
            cout<<"Enter the charactyer"<<endl;
            cin>>a;
            temp.push_back(a);
        }
        arr.push_back(temp);
    }
    mkPMat(arr);

}


void mkPMat(vector<vector<int>>& arry){

    for(int i =0; i<matX; i++){
        vector<int*> tp;
        for(int j =0; j<matY; j++){
            tp.push_back(&arry[i][j]);
        }
        pointer.push_back(tp);
    }
}

【问题讨论】:

  • 不是你的问题,但无论如何你很快就会遇到它,vector&lt;vector&lt;int&gt;&gt; arr; 本身并不分配任何内存。因此,cin&gt;&gt;arr[i][j] 将在您的程序编译后崩溃。
  • 那我该如何解决呢?我刚刚运行了我的代码,它就像你提到的那样崩溃了。我在这里错过了什么?
  • 你需要resize() or reserve() 来做到这一点。我想可能是resize()
  • 顺便说一句:arrypointer 都需要调整大小。
  • 另见 thisthis 将其应用于二维向量。

标签: c++ pointers multidimensional-array vector


【解决方案1】:

如果你想像这里一样保留一个二维指针数组

pointer[i][j] = &arry[i][j];

那么这需要签名

vector<vector<int*>> pointer;

【讨论】:

【解决方案2】:

这里的问题是vector&lt;vector&lt;int&gt;&gt; * pointer; 是一个指向向量向量的指针。这与您在此行中的内容不同:

pointer[i][j] = &arry[i][j];

在这里,您将向量中的位置设置为指向 int 的指针。也就是说,&amp;arry[i][j] 是一个int *。另一方面,pointerstd::vector&lt;std::vector&lt;int *&gt;&gt;。编译器不知道如何将这两者相互转换。

你真正想要的是让pointer 成为std::vector&lt;std::vector&lt;int *&gt;&gt;

std::vector<std::vector<int *>> pointer;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 2023-04-09
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多