首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于动态结构体数组的初始化 [已结贴,结贴人:Delphi_Rookie]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 23:48:49 楼主
    大家好!我想请教一个关于动态结构体数组的问题:
    假设定义了结构体:
    typedef struct myStruct
    {
      int a;
      int b;
    };

    下面动态地分配了一个长度为N的结构体数组:
    myStruct *structArr = new myStruct[N];
    我需要对structArr数组进行初始化,使得myStruct::a = 100, myStrruct::b = 300;
    请问,如果不采用循环遍历数组每个位置的方式,如何实现以上的初始化工作?
    对于内置的数据类型,比如int数组,有memset()函数可以调用,对于用户自定义的struct数组,是否有类似的用法?
    问题如上描述,期望得到大家的帮助,谢谢!

    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 23:52:151楼 得分:10
    没有类似的方法。
    可以考虑STL中的std::fill,但效率跟memset所使用的机制没的比。实际上就是个循环填充,只是用库里的函数,你自己可以少写一点代码而已。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-05-10 23:53:522楼 得分:0
    可以把结构定义为类。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 23:59:253楼 得分:0
    C/C++ code
    #include <iostream> #include <algorithm> using namespace std; struct MyStruct { int a; int b; }; int main() { MyStruct* structs = new MyStruct[100]; MyStruct initializer = {20, 30}; fill(structs, structs + 100, initializer); cout << structs[50].a << endl; cout << structs[50].b << endl; return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 00:00:444楼 得分:0
    最后忘了“delete[] structs;”了,鄙视自己一下。- -b
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 00:01:365楼 得分:0
    还没学到那,接分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 00:44:486楼 得分:10
    可以这样

    C/C++ code
    struct myStruct { myStruct():a(100),b(300){} int a; int b; }; int main() { myStruct *p = new myStruct[2]; return 0; }


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 00:45:487楼 得分:0
    最后别忘了delete[] p;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 00:52:558楼 得分:10
    #include <iostream>
    #include <algorithm>
    using namespace std;

    struct MyStruct {
      int a;
      int b;
    };


    int main() {
        MyStruct* structs = new MyStruct[100];
        MyStruct initializer = {20, 30};
        fill(structs, structs + 100, initializer);

        cout < < structs[50].a < < endl;
        cout < < structs[50].b < < endl;

        return 0;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 02:28:069楼 得分:0
    c++中直接在构造函数中就能实现了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 03:12:0510楼 得分:0
    还是戒指说得对。
    如果你的对象的初始状态是可以在编译时确定的,那应该直接通过构造函数实现。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 08:01:1111楼 得分:0
    后一种方法比较优雅~~学习。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 10:21:4612楼 得分:0
    两个方法都很好,学习了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 12:08:4913楼 得分:0
    引用 8 楼 SOMMERS 的回复:
    #include  <iostream>
    #include  <algorithm>
    using namespace std;

    struct MyStruct {
    int a;
    int b;
    };


    int main() {
    MyStruct* structs = new MyStruct[100];
    MyStruct initializer = {20, 30};
    fill(structs, structs + 100, initializer);

    cout  < < structs[50].a  < < endl;
    cout  < < structs[50].b  < < endl;

    return 0;
    }

    这个办法太棒了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 13:11:4014楼 得分:0
    都很好!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 15:48:0915楼 得分:10
    #include <iostream.h>
    class myStruct
    {

    public:
        myStruct():a(100),b(300)
    {};
    int a;
        int b;
    };

    int main()
    {
        myStruct s;
    cout < <s.a < <endl;
    cout < <s.b < <endl;
        return 0;
    }
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved