C++ C+中的非法间接寻址+;
我不明白为什么会出现非法间接寻址错误:C++ C+中的非法间接寻址+;,c++,dictionary,stl,iterator,C++,Dictionary,Stl,Iterator,我不明白为什么会出现非法间接寻址错误: #include <iostream> #include <algorithm> #include <stack> #include <unordered_map> using namespace std; int main() { string s1 = ""; stack<char> s; unordered_map<char, char> m;
#include <iostream>
#include <algorithm>
#include <stack>
#include <unordered_map>
using namespace std;
int main()
{
string s1 = "";
stack<char> s;
unordered_map<char, char> m;
m.insert('(', ')');
m.insert('{', '}');
m.insert('[', ']');
for (auto x : s1)
{
if (m.find(x) != m.end()) s.push(x);
else
{
auto it = m.find(s.top());
if (s.empty() || (it->second) != x) { cout << "Invalid\n"; s.pop(); break; }
}
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串s1=“”;
堆栈s;
无序地图m;
m、 插入(“(”,“)”);
m、 插入('{','}');
m、 插入(“[”,“]”);
用于(自动x:s1)
{
如果(m.find(x)!=m.end())s.push(x);
其他的
{
自动it=m.find(s.top());
如果(s.empty()| | |(it->second)!=x){cout您必须按如下方式更正插入到无序地图中的内容:
m.insert(std::make_pair('(', ')'));
m.insert(std::make_pair('{', '}'));
m.insert(std::make_pair('[', ']'));
演示:
插入到无序地图的更多选项如下:
或
您必须按如下方式更正插入到无序地图中的内容:
m.insert(std::make_pair('(', ')'));
m.insert(std::make_pair('{', '}'));
m.insert(std::make_pair('[', ']'));
演示:
插入到无序地图的更多选项如下:
或
还有另一种方法可以“插入”到原始答案未注明的地图中,即使用[]
运算符:
m['('] = ')';
m['{'] = '}';
m['['] = ']';
还有另一种方法可以“插入”到原始答案未注明的地图中,即使用[]
运算符:
m['('] = ')';
m['{'] = '}';
m['['] = ']';
是否只有这样的方法才能在C++中插入一个映射?@ AdRiang08NO,也可以使用.@ AdRiAN08,如果你有C++ 11编译器<代码> ESPOTE/代码>,它将创建对象。其他的将创建对对象和拷贝/move@Steephen事实上,我在一个在线法官问题中尝试了这三种方法,发现所有的方法都是same、 make_pair的性能最好(20毫秒),而emplace的性能最慢(32毫秒)。我可以使用C++11进行判断(我可以使用基于范围的循环)“你认为这是正确的推理吗?”AdRiang08,这是有趣的!!在性能的情况下,测量是最终决策的标准。正如我所说的,我将给出一个选项作为编辑的答案,请尝试C++。是否只有这样的方法才能在C++中插入一个图?@ AdRiang08NO,也可以使用。an008如果您有C++11编译器emplace
更好,它将在适当的位置创建对象。其他人将创建pair对象并进行复制/move@Steephen事实上,我在一个在线判断问题中尝试了所有3种方法,发现所有方法都保持不变,make_pair的表现最好(20毫秒),而emplace的表现最慢(32毫秒).并且我能够在该判断中使用C++11(我可以使用基于范围的循环).你认为我的推断正确吗?@adrian008这很有趣!!!.就绩效而言,衡量是最终决策的标准。正如我所说,我将通过编辑给出一个更多选项作为答案,请也尝试一下。如果s1
包含不正确的内容,这将导致未定义的行为用括号开始,因为在空堆栈上调用s.top()
,如果s1
包含不以括号开始的内容,这将导致未定义的行为,因为在空堆栈上调用s.top()
m['('] = ')';
m['{'] = '}';
m['['] = ']';