我有一个向量声明为全局变量,我需要能够重用.例如,我正在读取多个数据文件,解析数据以创建随后存储在向量中的对象.
vector<Object> objVector(100);
void main()
{
while(THERE_ARE_MORE_FILES_TO_READ)
{
// Pseudocode
ReadFile();
ParseFileIntoVector();
ProcessObjectsInVector();
/* Here I want to 'reset' the vector to 100 empty objects again */
}
Run Code Online (Sandbox Code Playgroud)
}
我可以将矢量重置为"vector objVector(100)",因为它最初是在堆栈上分配的吗?如果我执行"objVector.clear()",它将删除所有100个对象,并且我将有一个大小为0的向量.我需要在每个循环开始时大小为100.
Kon*_*lph 11
我有一个向量声明为全局变量,我需要能够重用.
为什么?从您的代码中不清楚为什么变量必须是全局的.你为什么不能声明它里面的循环?然后你不需要重置它,这将在每个循环中自动完成.
要从其他方法访问变量,请将其作为参数传递(通过引用,以便您可以对其进行修改).拥有全局变量很少是一个好的解决方案.
其他东西:main必须永远不会有返回类型void,这是无效的C++,许多编译器会拒绝它.
objVector.clear();
objVector.resize(100);
Run Code Online (Sandbox Code Playgroud)
但是,这可能不建议使用vector.您是否确定不应该使用push_back最初为空的矢量?你怎么能确定每个文件包含正好100个对象,而不是更少,正如你的问题所示?
矢量可能也不需要是全局的.最好传递一切.当你看到一堆没有参数调用的函数时,如果不是不可能跟踪发生的事情是非常困难的(因为除了你之外的其他人 - 包括你在几个月后回到这个代码时 - 会有不知道这些函数用于输入和输出是什么).
vector<Object> objVector(100);
int main()
{
while(THERE_ARE_MORE_FILES_TO_READ)
{
// Pseudocode
ReadFile();
ParseFileIntoVector();
ProcessObjectsInVector();
/* Here I want to 'reset' the vector to 100 empty objects again */
objVector.clear();
objVector.resize(100);
}
}
Run Code Online (Sandbox Code Playgroud)