为什么地图在 (switch) 案例之外变空了?
Why does map become empty outside the (switch) case?
我有以下代码,我在其中初始化我的地图,inserts
并查看第一种情况下数据是否已正确输入。然后我在案例 2 中再次查看我的数据,但它显示在案例 2 中它是空的,但在案例 1 中存在。我从未见过这种行为。
int main() {
int t;
cin>>t;
while(t--) {
int n, m;
cin>>n>>m;
while(m--) {
string s;
map<vector<int>, int> inserts;
int x, y, z, W;
int x1, y1, z1, x2, y2, z2;
cin>>s;
switch(resolveOptions(s)) {
case update:
cin>>x>>y>>z>>W;
inserts.insert({{x,y,z}, W});
cout<<"Inserts in u: ";
showInserts(inserts);
break;
case query:
cin>>x1>>y1>>x1>>x2>>y2>>z2;
cout<<"inserts in q";
showInserts(inserts);
// calculateSum(x1, y1, z1, x2, y2, z2, inserts)<<endl;
break;
}
}
}
showInserts(inserts)
显示地图
我不习惯用 C++ 编程。
行 map<vector<int>, int> inserts;
声明了一个变量,该变量是 local 到它出现的函数。每次调用该函数时,都会创建一个新的 'version' 变量(并初始化为空映射)。当函数returns时,inserts
对象被销毁
如果您希望 inserts
对象在函数调用之间保留其值,则需要将其声明为全局变量(outside/before 函数)。
相同的原则适用于在 for
或 while
循环中声明的变量:该变量的 scope 是 循环的一次迭代;每次循环运行时,都会创建一个新的变量实例,当循环的每个 迭代 结束时,变量就会被销毁。在这种情况下,您需要在循环中声明并初始化变量outside/before。
#include<bits/stdc++.h>
using namespace std;
map<vector<int>, int> inserts;
void test(int n) {
int x, y, z, W;
int x1, y1, z1, x2, y2, z2;
cin>>s;
switch(resolveOptions(s)) {
case update:
cin>>x>>y>>z>>W;
inserts.insert({{x,y,z}, W});
cout<<"Inserts in u: ";
showInserts(inserts);
break;
case query:
cin>>x1>>y1>>x1>>x2>>y2>>z2;
cout<<"inserts in q";
showInserts(inserts);
// calculateSum(x1, y1, z1, x2, y2, z2, inserts)<<endl;
break;
}
}
int main() {
test(1);
test(2);
}
只需声明 map 插入;全局保留其价值。
我有以下代码,我在其中初始化我的地图,inserts
并查看第一种情况下数据是否已正确输入。然后我在案例 2 中再次查看我的数据,但它显示在案例 2 中它是空的,但在案例 1 中存在。我从未见过这种行为。
int main() {
int t;
cin>>t;
while(t--) {
int n, m;
cin>>n>>m;
while(m--) {
string s;
map<vector<int>, int> inserts;
int x, y, z, W;
int x1, y1, z1, x2, y2, z2;
cin>>s;
switch(resolveOptions(s)) {
case update:
cin>>x>>y>>z>>W;
inserts.insert({{x,y,z}, W});
cout<<"Inserts in u: ";
showInserts(inserts);
break;
case query:
cin>>x1>>y1>>x1>>x2>>y2>>z2;
cout<<"inserts in q";
showInserts(inserts);
// calculateSum(x1, y1, z1, x2, y2, z2, inserts)<<endl;
break;
}
}
}
showInserts(inserts)
显示地图
我不习惯用 C++ 编程。
行 map<vector<int>, int> inserts;
声明了一个变量,该变量是 local 到它出现的函数。每次调用该函数时,都会创建一个新的 'version' 变量(并初始化为空映射)。当函数returns时,inserts
对象被销毁
如果您希望 inserts
对象在函数调用之间保留其值,则需要将其声明为全局变量(outside/before 函数)。
相同的原则适用于在 for
或 while
循环中声明的变量:该变量的 scope 是 循环的一次迭代;每次循环运行时,都会创建一个新的变量实例,当循环的每个 迭代 结束时,变量就会被销毁。在这种情况下,您需要在循环中声明并初始化变量outside/before。
#include<bits/stdc++.h>
using namespace std;
map<vector<int>, int> inserts;
void test(int n) {
int x, y, z, W;
int x1, y1, z1, x2, y2, z2;
cin>>s;
switch(resolveOptions(s)) {
case update:
cin>>x>>y>>z>>W;
inserts.insert({{x,y,z}, W});
cout<<"Inserts in u: ";
showInserts(inserts);
break;
case query:
cin>>x1>>y1>>x1>>x2>>y2>>z2;
cout<<"inserts in q";
showInserts(inserts);
// calculateSum(x1, y1, z1, x2, y2, z2, inserts)<<endl;
break;
}
}
int main() {
test(1);
test(2);
}
只需声明 map