为了节省空间是否可以把一个比较大的结构宣言成一个vector, 这样只是在使用的时候才给他追加成员。
这样做是否合乎常规?比如:
已经定义了
struct POINTa 
{
  int x[100];
  int y[100];
}
之后struct MyStruct
{
 POINTa pt;
 int name;
}

struct MyStruct
{
  vector<POINTa> pt;
}
那一种写法个有效率?更加合理?

解决方案 »

  1.   

    应该是:
    struct MyStruct
    {
      vector<POINTa> pt;
      int name
    };
    吧?后者有点相当于使用时new,当然可以节约一些空间。
      

  2.   

    后者并不比前者省空间啊.vector里的size不是真正的空间数啊.真正的空间大小是capacity,它远远大于size的啊.
      

  3.   

    vector通常多用8字节而已:用swap技巧保持vector的空间恰好等于包含的成员
      

  4.   

    vector实际有一个预分配的空间,如果空间不够会动态增长,对于存储大的结构体效率也未必高.
      

  5.   

    糊涂了,各位意见不一,(感谢晨星指出的错误,结构后面应该加 ;)
    我该听那一位的,说明一下;
    我这样做的意义是,在实际操作的时候,当这个结构当 name = 0;的时候,该vector将不被赋值,内容可以为空、我想通过vector来节省空间,是否可行?
      

  6.   

    用swap技巧来压缩vector空间.用不着name=0之类
      

  7.   

    struct MyStruct
    {
      vector<POINTa*> pt;
      int name
    };需要时new一个放进去,平时只存放一个指针的地址,这个应该是最节省的方法了
      

  8.   

    vector
    单纯空间来说,未必比指定空间要节省.
      

  9.   

    与其这么搞还不如new整个struct造链表算了,如果struct成员很多也很省空间,而且不麻烦
      

  10.   

    比如:
    已经定义了
    struct POINTa 
    {
      int x[100];
      int y[100];
    }
    之后struct MyStruct
    {
     POINTa pt;
     int name;
    }

    struct MyStruct
    {
      vector<POINTa> pt;
    }
    那一种写法个有效率?更加合理?如果只有一个成员,用vector似乎是有点杀鸡用牛刀的感觉,这种情况下,我觉得用指针更好:
    struct MyStruct
    {
        POINTa *ppt;
    }
    反正在C++中结构也可以有成员函数和构造析构函数,把释放内存的工作交给析构函数好了