如何将c++ 11中的循环转换为传统的循环
How to convert C++ 11 loop in to traditional loop?
我在我的程序错误C2143:语法错误:缺少','之前':',我使用Visual c++ express 2010,我认为c++ 11不支持VC 2010。
有人可以修改这段代码并解释如何在传统的for循环中恢复这个for循环吗?ouFlexSignalInfo是c++ stl中的一个列表数据类型
for(auto ouSignalInfo : ouFlexSignalInfo) //C++11;
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = ouSignalInfo.m_omEnggValue.c_str();
ouSignal.m_omRawValue = ouSignalInfo.m_omRawValue.c_str();
ouSignal.m_omSigName = ouSignalInfo.m_omSigName.c_str();
ouSignal.m_omUnit = ouSignalInfo.m_omUnit.c_str();
ouSignal.m_msgName=ouFrame.m_strFrameName.c_str();
SigInfoArray.Add(ouSignal);
}
大致相当于:
auto iterBegin = std::begin(ouFlexSignalInfo);
auto iterEnd = std::end(ouFlexSignalInfo);
for(; iterBegin != iterEnd; ++iterBegin)
{
auto ouSignalInfo = *iterBegin;
//the rest of body
}
iterBegin
和iterEnd
是ouFlexSignalInfo成员begin
和end
返回的迭代器。
这种循环适用于所有具有begin和end成员的
如果您使用MS vc++ 2010,那么编译器将支持MS语言的基于范围的for循环扩展。代码将如下所示
for each ( auto ouSignalInfo in ouFlexSignalInfo )
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = ouSignalInfo.m_omEnggValue.c_str();
ouSignal.m_omRawValue = ouSignalInfo.m_omRawValue.c_str();
ouSignal.m_omSigName = ouSignalInfo.m_omSigName.c_str();
ouSignal.m_omUnit = ouSignalInfo.m_omUnit.c_str();
ouSignal.m_msgName=ouFrame.m_strFrameName.c_str();
SigInfoArray.Add(ouSignal);
}
或者最好写
for each ( const auto &ouSignalInfo in ouFlexSignalInfo )
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = ouSignalInfo.m_omEnggValue.c_str();
ouSignal.m_omRawValue = ouSignalInfo.m_omRawValue.c_str();
ouSignal.m_omSigName = ouSignalInfo.m_omSigName.c_str();
ouSignal.m_omUnit = ouSignalInfo.m_omUnit.c_str();
ouSignal.m_msgName=ouFrame.m_strFrameName.c_str();
SigInfoArray.Add(ouSignal);
}
由于ouFlexSignalInfo的类型未知,因此可以使用迭代器。例如
#include <iterator>
for ( auto it = std::begin( ouFlexSignalInfo ); it != std::end( ouFlexSignalInfo ); ++it )
{
SSignalInfo ouSignal;
ouSignal.m_omEnggValue = it->m_omEnggValue.c_str();
ouSignal.m_omRawValue = it->m_omRawValue.c_str();
ouSignal.m_omSigName = it->m_omSigName.c_str();
ouSignal.m_omUnit = it->m_omUnit.c_str();
ouSignal.m_msgName = ouFrame.m_strFrameName.c_str();
SigInfoArray.Add( ouSignal );
}
相关文章:
- 将手写循环转换为标准库调用
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- 如何将python的for循环转换为c++
- 将 NumPy 切片循环转换为C++
- 我想将这些循环转换为递归.是否可以将这些循环转换为递归
- 如何在C++中将基本嵌套循环转换为递归循环
- 如何将循环转换为递归
- 如何将 c++ 中的 for 循环转换为汇编程序
- 将多个循环转换为一个递归
- 将此 C++ for 循环转换为汇编语言
- 将while循环转换为等效的for循环
- 正在将for循环转换为OpenMP
- 将 while 循环转换为 do while 循环
- 在数组的每个元素中存储一个值:将C do{}while循环转换为MIPS asm
- 从嵌套的 for 循环转换为嵌套的 while 循环时出现问题
- 将C++ FOR循环转换为德尔福
- 将简单的for循环转换为while循环
- 将do-while循环转换为while循环
- 将while循环转换为for循环会导致无限循环
- 在C++中将 FOR 循环转换为 DO WHILE 循环