由定义位置引发的困惑!解决方法

由定义位置引发的困惑! 由定义位置不同引发的困惑!//程序1:vector stringmy_vsmy_vs.reserve(10)intma

由定义位置引发的困惑!

由定义位置不同引发的困惑!

//程序1:
vector <string>       my_vs;     my_vs.reserve(10);
int   main()
{
...........
}
//程序2:
vector <string>       my_vs;
int   main()
{
    my_vs.reserve(10);
...........
}
//程序3:
int   main()
{
vector <string>       my_vs;     my_vs.reserve(10);
...........
}
以上是程序有对,有错!

    请教个位为什么会这样呢?
希望高手解释这3个运行程序原理!

[解决办法]
//程序1:
vector <string> my_vs; my_vs.reserve(10);
int main()
{
...........
}

错在 "my_vs.reserve(10); "语。
在main()函数以外只能有其它类型的声明和定义语句,但不能有函数的调用语句!

//程序2:
vector <string> my_vs;
int main()
{
my_vs.reserve(10);
...........
}

这程序正确,定义了一个全局变量,一个vector容器my_vs,然后在main()主函数中调用其成员函数!

//程序3:
int main()
{
vector <string> my_vs; my_vs.reserve(10);
...........
}

这个程序最佳,在main()内定义了一个局部变量,然后调用其成员函数。之所以最佳在于其局部变量较全局变是有更好的访问控制!