一点心得体会
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内存清理:
//清理内存:析构函数调用以下函数进行内存情理
你应该在其析构函数中处理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());???当最后一个时怎么办?
int idx = mapSaveVarAndIndex[(*iterVar)->strName];
listIndex.push_back(idx);
}
}
}//灵活掌握其中奥妙,则容器基本可以过关了
错误:
这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。
正确:
map的key();map的value()?(用first和second其实也够了)
自定生成的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其实也够了)
相关文章推荐
- 读设计师要懂心理学笔记3-人如何记忆
- 欢迎使用CSDN-markdown编辑器
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- highcharts在项目中的应用,根据年月日周季显示图形,形象的展示数据。
- linux笔记整理(cent os)
- hat linux下vnc的安装
- PHP扩展
- Apache Qpid 高可用集群
- spark:spark1.4.0+Tachyon--48
- Android Volley完全解析(四),带你从源码的角度理解Volley
- 【整理】--【GPIO】OK6410
- 文件下载示例
- 文件I/O
- Android apk动态加载机制的研究
- 性能测试工具Loadrunner使用经验小结(原创更新版)
- 总结shell
- Android Volley完全解析(一),初识Volley的基本用法
- Pub/Sub 发布订阅
- 插入排序的C++实现
- oracle 数据导入导出 之expdp impdp