元素是vector的vector,怎样reserve??

The_eagles 2009-01-06 05:14:25


typedef vector<int> VB;
struct MM
{
VB vec;
int x;
}
typedef vector<MM> VA;

int main()
{
VA vmm;
// 确知vmm最多只有10个元素,vmm.vec最多只有20个元素。
怎样一次性给vmm reserve足够的空间?既分配21*10个存储单元

}

...全文
131 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_eagles 2009-01-06
  • 打赏
  • 举报
回复

perfect! !!

csdn上的朋友们真的很赞! 没想到大家这么热情。
分不是很多,希望大家笑纳啊,呵呵!


太乙 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 The_eagles 的回复:]
引用 6 楼 hqin6 的回复:
C/C++ code#include"stdafx.h"#include <iostream>#include <vector>usingnamespacestd;classCTest
{
vector <int>vecInt;
int m_int;
public:
CTest()
{
vecInt.reserve(20);
}
};
intmain()
{
vector <CTest>vecObj;
vecObj.reserve(10);return0;
}


这也不行。
CTest构造函数未被调用
[/Quote]

大意了!!!!!!!



#include <iostream>
#include <vector>
using namespace std;

class CTest
{
public:
vector<int> vecInt;
int m_int;

CTest()
{
vecInt.reserve(20);
}
CTest(const CTest& ct)
{
vecInt.reserve(20);
}
};

int main()
{
vector<CTest> vecObj;
vecObj.reserve(10);
CTest ctObj;
vecObj.push_back(ctObj);
cout<<vecObj.at(0).vecInt.capacity()<<endl;
return 0;
}



太乙 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 The_eagles 的回复:]
引用 10 楼 lightnut 的回复:
#include <vector>
#include <iostream>
using namespace std;

typedef vector <int> VB;

template <int N>
struct MM
{
MM()
{
vec.reserve(N);
}

VB vec;
int x;
};

typedef vector < MM <20> > VA;

int main()
{
VA vmm;
// 确知vmm最多只有10个元素,vmm.vec最多只有20个元素。
//怎样一次性给vmm reserve足够的空间?既分配21*10个存储…
[/Quote]

参数模板

就是以数字作为模板参数,比如int,float等!

The_eagles 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lightnut 的回复:]
#include <vector>
#include <iostream>
using namespace std;

typedef vector <int> VB;

template <int N>
struct MM
{
MM()
{
vec.reserve(N);
}

VB  vec;
int x;
};

typedef vector < MM <20> >  VA;

int main()
{
VA vmm;
// 确知vmm最多只有10个元素,vmm.vec最多只有20个元素。
//怎样一次性给vmm reserve足够的空间?既分配21*10个存储单元
vmm.reserve(10);

vmm.push_back(MM <20>(…
[/Quote]


vmm.reserve(10);
vmm.push_back(MM <20>());// 构造函数MM()被调用
cout<<vmm.at(0).vec.capacity()<<endl; // 输出0 。这是为什么?
另外对vector < MM <20> >不是很懂,请问lightnut能不能给我解释一下。谢谢!



lightnut 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 The_eagles 的回复:]
引用 6 楼 hqin6 的回复:
C/C++ code#include"stdafx.h"#include <iostream>#include <vector>usingnamespacestd;classCTest
{
vector <int>vecInt;
int m_int;
public:
CTest()
{
vecInt.reserve(20);
}
};
intmain()
{
vector <CTest>vecObj;
vecObj.reserve(10);return0;
}


这也不行。
CTest构造函数未被调用
[/Quote]
你需要push_back一个CTest对象, 才会调用构造函数
The_eagles 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hqin6 的回复:]
C/C++ code#include"stdafx.h"#include<iostream>#include<vector>usingnamespacestd;classCTest
{
vector<int>vecInt;
int m_int;
public:
CTest()
{
vecInt.reserve(20);
}
};
intmain()
{
vector<CTest>vecObj;
vecObj.reserve(10);return0;
}
[/Quote]

这也不行。
CTest构造函数未被调用
The_eagles 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hqin6 的回复:]
C/C++ codetypedef vector<int>VB;structMM
{
VB vec;intx;
}
typedef vector<MM>VA;intmain()
{
VA vmm;
vmm.vec.reserve(20);
vmm.reserve(10);//确知vmm最多只有10个元素,vmm.vec最多只有20个元素。怎样一次性给vmm reserve足够的空间?既分配21*10个存储单元

}
[/Quote]

vmm.vec.reserve(20) 编译通不过。
vec is not a member of 'vector<struct MM,class std::allocator<struct MM> >’
lightnut 2009-01-06
  • 打赏
  • 举报
回复
#include <vector>
#include <iostream>
using namespace std;

typedef vector<int> VB;

template <int N>
struct MM
{
MM()
{
vec.reserve(N);
}

VB vec;
int x;
};

typedef vector< MM<20> > VA;

int main()
{
VA vmm;
// 确知vmm最多只有10个元素,vmm.vec最多只有20个元素。
//怎样一次性给vmm reserve足够的空间?既分配21*10个存储单元
vmm.reserve(10);

vmm.push_back(MM<20>());
vmm.push_back(MM<20>());

}
xiaoyisnail 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hqin6 的回复:]
C/C++ codetypedef vector<int>VB;structMM
{
VB vec;intx;
}
typedef vector<MM>VA;intmain()
{
VA vmm;
vmm.vec.reserve(20);
vmm.reserve(10);//确知vmm最多只有10个元素,vmm.vec最多只有20个元素。怎样一次性给vmm reserve足够的空间?既分配21*10个存储单元

}
[/Quote]

up
lightnut 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hqin6 的回复:]
引用 5 楼 lightnut 的回复:
vmm.reserve(10);
for (VA::iterator it = vmm.begin();it!=vmm.end(); ++it) {
it->vec.reserve(20);
}


这可不对,在vmm.reserve(10)之后,vmm.begin()是为空的!!!

也就是for循环根本进不去~~
[/Quote]
谢谢指正!!!
太乙 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lightnut 的回复:]
vmm.reserve(10);
for (VA::iterator it = vmm.begin();it!=vmm.end(); ++it) {
it->vec.reserve(20);
}
[/Quote]

这可不对,在vmm.reserve(10)之后,vmm.begin()是为空的!!!

也就是for循环根本进不去~~
太乙 2009-01-06
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

class CTest
{
vector<int> vecInt;
int m_int;
public:
CTest()
{
vecInt.reserve(20);
}
};

int main()
{
vector<CTest> vecObj;
vecObj.reserve(10);
return 0;
}



lightnut 2009-01-06
  • 打赏
  • 举报
回复
vmm.reserve(10);
for (VA::iterator it = vmm.begin();it!=vmm.end(); ++it) {
it->vec.reserve(20);
}
太乙 2009-01-06
  • 打赏
  • 举报
回复


typedef vector<int> VB;
struct MM
{
VB vec;
int x;
}
typedef vector<MM> VA;

int main()
{
VA vmm;
vmm.vec.reserve(20);
vmm.reserve(10);
// 确知vmm最多只有10个元素,vmm.vec最多只有20个元素。
怎样一次性给vmm reserve足够的空间?既分配21*10个存储单元

}



nineforever 2009-01-06
  • 打赏
  • 举报
回复
vmm的内容和vmm.vec[i]的内容不是存放在一起的,所以你不能一次性reserve
你只能先reserve vmm。然后插入MM之后再对MM的vec做reserve
lin12345 2009-01-06
  • 打赏
  • 举报
回复
帮顶
nullah 2009-01-06
  • 打赏
  • 举报
回复
你就直接reserve三
会根据你MM的大小分配足够的空间

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧