c++ - C++ 如何在循环中声明一个“复杂”对象?
问题描述
编辑:正如@HolyBlackCat 所提到的,“如果你需要它在迭代之间保留它的[变量]值,它必须留在外面。” 这当然适用于原始类型,例如。诠释。所以这个问题实际上只是噪音,对不起。
我试图弄清楚在声明对象时如何保持一致,“在循环内部或外部声明变量?” 仅在循环内使用的变量的问题。参见例如。在循环内声明变量,好的做法还是坏的做法?.
考虑以下示例。令 V 为具有默认构造函数的对象。
// Example 1
std::vector<int> V; // Works as intended
for (int i=0; i<2; i++) { // ...but V should be declared inside loop(?)
V.push_back(i);
// V used only inside loop
}
// Example 2
for (int i=0; i<2; i++) { // OK Syntax, Wrong Semantics
std::vector<int> V; // V is "created" anew in each loop-step
V.push_back(i);
// V used only inside loop
}
// Example 3
for (int i=0; i<2; i++) { // Syntax Error, other syntax possible?
std::vector<int> V.push_back(i);
// V used only inside loop
}
示例 1:定义我正在寻找的近似语义 - 除了 V 是循环本地的,我更愿意在循环内定义 V。
示例 2:在循环内定义 V,但也在每个循环步骤中重新创建它,这不是所需的语义。
示例 3:语法的“Nice try”探索 - 我试图声明并“立即使用”对象 V。这是非法语法。
如果在一天结束时,许多类型的对象在循环外被最优雅地声明(就像示例中的 V 一样;否则,如果在循环内声明,则必须以某种方式声明“守卫”)那么我可能只是倾向于在循环之外声明所有内容,就在循环之前,而不是在循环内部......
请就这个问题给我建议,如何获得示例 1 的语义,但在循环内声明 V(如果可能)。
解决方案
是的,你可以这样做:
std::vector<int> V{i};
V
它在声明向量时用值初始化向量i
。
另一方面,您的两个循环实际上都没有做任何有用的事情。您每次都在循环内重新声明 V ,因此以前的 push_backs 不可见。此外,在循环V
范围之外也不能使用。for
看来您要做的是用计数填充向量。简单的方法是:
std::vector<int> V(2);
std::iota(V.begin(), V.end(), 0);
推荐阅读
- hp-uft - 如果检查失败,则从 UFT 检查点获取布尔值而不抛出错误
- php - Pass variable from header.php to functions.php
- javascript - Socket.io 客户端如何知道用户是否连接到通道
- angular - TypeError:您在流中提供了“未定义”
- internet-explorer - Kerberos 身份验证仅适用于 IE -> 私人浏览器
- react-native - 在 React Native 中从 Google Places Autocomplete 获取纬度和经度
- c# - 如何保护使用 iTextSharp 签名的 pdf 文件?
- android-studio - Error related to resources_ap after upgrading to Android Studio 3.4
- google-apps-script - 如何让用户使用脚本(绑定到 Gsheet)来更新另一个 Gsheet 中的单元格(用户没有编辑权限)?
- wpf - 在桌面桥下运行时无法访问输出目录中的文件