KENSCANF 2023-10-25 09:13 采纳率: 50%
浏览 6
已结题

c++类中数组长度未知,需要定义时传入。怎么定义。


class infosys{
    string *infos[2];//定义指针

    public:
    infosys(int n){
        infos=new string[n][2];//获取空间       error1
        for(int i=0;i<n;i++)
        {
            cin>>infos[i];// error2
            cin>>infos[i]+1; 
        }
    }
}

[Error1] incompatible types in assignment of 'std::string ()[2] {aka std::basic_string ()[2]}' to 'std::string* [2] {aka std::basic_string* [2]}'
[Error2] no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream}' and 'std::string* {aka std::basic_string*}')

在不使用模板的情况下,怎么达到定义string二维数组。

  • 写回答

2条回答 默认 最新

  • 木头人123。 2023-10-25 09:19
    关注

    C++不直接支持动态分配二维数组,你可以使用std::vector,它可以动态分配内存,并且可以容易地实现二维数组。

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    class Infosys {
        vector<vector<string>> infos;  // 使用vector代替数组
    
    public:
        Infosys(int n) : infos(n, vector<string>(2)) {  // 初始化vector
            for(int i = 0; i < n; i++) {
                cin >> infos[i][0];
                cin >> infos[i][1];
            }
        }
    };
    
    

    在这个代码中,infos被定义为一个vector<vector>,即一个二维字符串向量。在构造函数中,我们使用vector的构造函数来初始化infos,使其有n行和2列。然后,我们可以像普通的二维数组一样使用infos。
    vector的行和列都是从0开始的,所以我们使用infos[i][0]和infos[i][1]来访问元素。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)