新人咨询关于new和关于指针的问题

yagas 2015-09-30 09:00:08
请问使用vector和使用数组有什么区别?像我这样在代码中使用vector有什么不妥?
名称应该使用char* 还是使用 string?
为什么我用 vector<CTown> towns(10);会报错?vector<CTown> towns;这样就没有问题
我新建CTown要不要使用new?用和不用有什么区别呢?使用new就必需要使用*指针吗?
能不能使用 "第%d座城市名称是:%s" 这样进行格式化字符串?
个人是新手,对C++有无限的疑问,请大家帮助我解答。

----------------------------------------------------------------------------------------------------------

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

//将领
class CGeneral {
private:
string name;

public:
CGeneral( string name ){
this->name = name;
}

string getName() {
return this->name;
}
};

//城池
class CTown {
public:
CTown( string name ){
this->name = name;
}

string getName(){
return this->name;
}

int getGeneralCount() {
return this->generals.size();
}

bool append_general( CGeneral general ) {
this->generals.push_back( general );
return true;
}

private:
string name;

//城池中居住的将领
vector<CGeneral> generals;
};

//场景
class CScene {
private:
//场景中的城池
vector<CTown> towns;

public:
bool append_town( CTown town ){
this->towns.push_back( town );
return true;
}

int count_town() {
return this->towns.size();
}

CTown at(int index) {
return this->towns.at(index);
}
};

//创建场景
int main() {

CGeneral m_guanyu = CGeneral("关羽");

CScene scene;
CTown *town_xinye = new CTown("新野");
town_xinye->append_general( m_guanyu );
scene.append_town( *town_xinye );

CTown town_xuchang = CTown("许昌");
scene.append_town( town_xuchang );

CTown town_jianye = CTown("建业");
scene.append_town( town_jianye );

cout<<"场景中目前有城池数:"<<scene.count_town()<<"\n"<<endl;

string msg;
for(int i=0; i<scene.count_town();i++) {
CTown t = scene.at(i);
cout<<"第"<<i+1<<"城池名称是:"<<t.getName()<<"\t"<<"居住的将领人数:"<<t.getGeneralCount()<<endl;
}

return 0;
}


-----------------------------------------------------------------------------
执行结果如下
...全文
88 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wujun57480901 2015-09-30
  • 打赏
  • 举报
回复
使用new的话,应该配上delete吧,new申请的空间要自己释放的,我记得new是在堆上创的空间的,做了三件事:获得一块内存空间、调用构造函数、返回正确的指针
ztenv 版主 2015-09-30
  • 打赏
  • 举报
回复
请问使用vector和使用数组有什么区别? 答:vector的长度是根据元素数目自动增长的(当内存不够的时候vector会重新分配内存并拷贝你vector中的每个元素);数据是定长的,并且是裸指针,对越界等操作不做检查; 像我这样在代码中使用vector有什么不妥? 答:可以这么用 名称应该使用char* 还是使用 string? 答:无所谓,使用string会方便些,但有个需要注意的地方:构造函数不要传string,建议你把构造函数的string参数改为:const char *; 为什么我用 vector<CTown> towns(10);会报错?vector<CTown> towns;这样就没有问题 答:如果你想在声明的时候指定容量,那么请给你的CTown创 建一个无参的构造函数 我新建CTown要不要使用new?用和不用有什么区别呢?使用new就必需要使用*指针吗? 答:依你现在的情况,只是在main中使用,用不用new没区别,如果用了new,一定在要main退出时delete; 能不能使用 "第%d座城市名称是:%s" 这样进行格式化字符串? 答:使用printf可以用%d,%s参数
Saleayas 2015-09-30
  • 打赏
  • 举报
回复
因为你的那个没有无参数的构造函数。

64,282

社区成员

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

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