您的位置:首页 > 其它

一点心得体会

2015-06-15 23:34 435 查看
1虽然vs玩了一年多,但是还是有很多不足之处,提交的工程乱七八糟,被头儿驳回好多次:

自定生成的Debug等等都要删除干净,vcxproj,.vcxproj.filters要保留,vcxproj.user文件要删除

suo隐藏文件也要删除,不然提交后工程文件会有红色叹号!

提交工程的结构分门别类,非常清楚才行;有层次有逻辑

项目文档的结构都要构思好,同样有层次有逻辑

从研发到项目经理的过程,要学的很多,包括如何和别人沟通,快速理解和被理解

要主动思维,主动思考,看代码也是这样,不是填鸭,而是自己主动去想,要是你,这个类要怎么去构建??经过主动思考,再看代码,你发现,所有的类都是那么丰满而又有特色;

主动提问,不要去等别人告诉你

永远不要想当然,看似简单,实则暗藏大的学问

2右键工程,在属性第一大类可以设置框架和引用;

右键,菜单,项目依赖项:总之一句话,用来控制编译顺序的,无需多计较。
http://blog.csdn.net/jxxfqyy/article/details/7010757 http://blog.sina.com.cn/s/blog_96b81d690100wyex.
3内存清理:

stl 中的所有容器,当元素被erase或者clear后,会调用元素类型的析构函数。

所以,你的两个问题,答案都是 会 调用 析构函数。


//清理内存:析构函数调用以下函数进行内存情理

你应该在其析构函数中处理item的内存清理工作,如果你要clear时也清理内存,就上面说的自己重写覆盖clear函数,在里面做清理

void Clear()

{

//模型

{

list<SCR_ModelData*>::iterator iter = listModel.begin();

for( ; iter != listModel.end(); ++iter )

{

delete *iter;

}

listModel.clear();

mapModelId.clear();

}

//航天器

{

list<SCR_SpaceCraftData*>::iterator iter = listCraft.begin();

for( ; iter != listCraft.end(); ++iter )

{

delete *iter;

}

listCraft.clear();

mapCraftId.clear();//list,map?需要显示调用吗???答案是需要。。

//关于TList.Clear释放内存 一直以来被TList.Clear是否会释放每个Item的内存纠结,今天终于找到确切的答案了:不会释放,所以要释放每个Item指向的内存块,还是需要自己老老实实用循环Free掉或者Dispose掉

}

//场景

{

list<SCR_ScenarioData*>::iterator iter = listScenario.begin();

for( ; iter != listScenario.end(); ++iter )

{

delete *iter;

}

listScenario.clear();

mapScenarioId.clear();

}

}

注意new是在外边new的,并不是只有delete没有new

如果List里面是指针的话,需要单独释放每个item内容,然后再clear

TList的clear,只是清除列表中的占位(开始有10个位置,占用了5个,clear之后,又恢复到10个位置可用),不负责每个对象的创建和释放
http://bbs.csdn.net/topics/390534931(主要参考博文)
关于map容器的使用;

void CScheduler::GetModelSaveVarIndex( MODEL_INDEX &mapModelVarIndex )

{ //从仿真器中获得的变量名称

vector<string> vecSaveName;

m_emulator->GetVariableName(vecSaveName, VARIABLE_SAVE);

map<string, int> mapSaveVarAndIndex;

for( int i=0; i < vecSaveName.size(); i++ )

{ mapSaveVarAndIndex[vecSaveName.at(i)]= i;}

//获取模型设备列表 list<SCR_ModelData*> model_list;

SCR_Utilis::GetAllModelList(&m_SCRInfo, model_list );

list<SCR_ModelData*>::iterator iter;

for(iter = model_list.begin();iter!=model_list.end();iter++)

{ SCR_ModelData* pmodel =
*iter;

assert( pmodel != NULL );

string strModelName = pmodel->strName.c_str();

list<SCR_EchoVarData*> save_var_list;

SCR_Utilis::GetAllSaveVarsOfOneModel(pmodel, save_var_list);

list<SCR_EchoVarData*>::iterator iterVar;//建立变量索引

list<int>& listIndex = mapModelVarIndex[strModelName];

for(iterVar = save_var_list.begin();iterVar!=save_var_list.end();iterVar++)

{

assert( mapSaveVarAndIndex.find((*iterVar)->strName) != mapSaveVarAndIndex.end());???当最后一个时怎么办?

//找到的话就是返回那个key所在的iterator,找不到就反回my_Map.end()

//http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html(通过这例子就可以推断assert在end时还是会执行其后的语句的)


int idx = mapSaveVarAndIndex[(*iterVar)->strName];

listIndex.push_back(idx);

}

}

}//灵活掌握其中奥妙,则容器基本可以过关了

错误:

assert(i++ < 100);


  这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。

  正确:

assert(i < 100);
i++;


map的key();map的value()?(用first和second其实也够了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: