如何解决为什么map在switch格外变成空的?
我有以下代码,在其中初始化地图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,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,z2,inserts)<<endl;
break;
}
}
}
showInserts(inserts)
显示地图
我不习惯用C ++编程。
解决方法
第map<vector<int>,int> inserts;
行声明了一个变量,该变量在发生该函数的地方 local 。每次调用该函数时,都会创建变量的新“版本”(并将其初始化为空映射)。函数返回后,inserts
对象被破坏。
如果您希望inserts
对象在函数调用之间保留其值,则需要将其声明为全局变量(在函数外部/函数之前)。
在for
或while
循环中声明的变量也遵循相同的原理:该变量的作用域是循环的一次迭代;每次循环运行时,都会创建该变量的新实例,并且当循环的每个 iteration 结束时,该变量将被销毁。在这种情况下,您需要在循环外部/之前声明并初始化变量。
let button = UIButton()
button.setImage(UIImage(named: "Unchecked"),forState: .Normal)
button.setImage(UIImage(named: "Checked"),forState: .Selected)
@IBAction func buttonPressed(sender: AnyObject) {
if let button = sender {
if button.isSelected {
// set deselected
button.isSelected = false
} else {
// set selected
button.isSelected = true
}
}
}
只需声明map
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。