vs2015调试时无法查看string、vector等类型的值

最近用vs2015调试程序时,发现一个问题,就是vector,list,map,等STL容器在调试时想观察其内容非常麻烦.

看不了变量的值,情况如下:

解决办法:

(1)设置Show raw structure of objects in variables windows(中文版是“在变量窗口中显示对象的原始结构”)这个选项

首先找到“Debug(调试)”,下拉菜单里选择“Options(选项)”

然后找到Show raw structure of objects in variables windows,把前面的勾去掉(一定是去掉勾)

(2)设置“Use Native Compatibility Mode”和“Use Managed Compatibility Mode”(中文版是“使用本机兼容性模式”和“使用托管兼容模式”)这个选项。把前面的勾去掉,否则可能无法使用natvis文件,如下图所示:

(3)添加.Natvis文件,首先在这里下载NatvisFile.natvis文件

在工程中的“Resource Files”,右击,添加已有文件:

添加已经下载好的文件。

(4)重新调试,结果如下:

 

 

 

 

 

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下代码在曾经每个模块设计和调试存在问题的思考,存在什么问题及解决方法,以及算法的改进设想#include <iostream> #include <fstream> #include <string> #include <vector> #include <algorithm> #include <iterator> using namespace std; typedef istream_iterator<string> string_input; void welcome() { cout << "******************* 变位词查找系统*********************\n" << "在词典中找出给定的字符串的所有变位词" << endl; } void readDict(vector<string> & dictionary) { cout << "首先,请输入词典的文件名称:" << endl; string dictionary_name; cin >> dictionary_name; ifstream ifs(dictionary_name.c_str()); if (!ifs.is_open()) { cerr << "异常:文件"<< dictionary_name << "没有找到 " << endl; exit(1); } cout << "词典读入中 ..." << flush; copy(string_input(ifs), string_input(), back_inserter(dictionary)); sort(dictionary.begin(),dictionary.end()); cout << "词典包含有 " << dictionary.size() << " 个单词\n\n"; ifs.close(); } void analyseAnagram(const vector<string> & dictionary) { cout << "请输入单词(或任意字母序列)" << endl; for (string_input p(cin); p != string_input(); ++p) { cout << "查找输入单词的变位词中..." << endl; string word = *p; sort(word.begin(), word.end()); bool found_one = false; do { if (binary_search(dictionary.begin(), dictionary.end(), word)) { cout << " " << word ; found_one = true; } } while (next_permutation(word.begin(), word.end())); if (!found_one) cout << " 抱歉,没有找到变位词\n"; cout << "\n请输入下一个单词 " << "(或输入Ctrl+Z终止程序 ) \n" << endl; } } int main() { welcome(); vector<string> dictionary; readDict(dictionary); analyseAnagram(dictionary); system("pause"); return 0; }
06-08
在这段代码的每个模块设计和调试可能存在的问题及解决方法如下: 1. welcome()函数:这个函数没有明显的问题,不需要进行改进。 2. readDict()函数: - 问题:如果输入的词典文件名称不存在或者无法打开,程序会抛出异常并退出。需要添加异常处理机制,例如提示用户重新输入文件名。 - 解决方法:可以使用try-catch语句来捕获异常,并提示用户重新输入文件名。 - 改进设想:可以添加文件格式检查机制,确保输入的文件是正确的词典文件。 3. analyseAnagram()函数: - 问题:如果输入的单词中包含非字母的字符,程序可能会出现不可预期的行为。需要添加输入检查机制,确保输入的单词只包含字母。 - 解决方法:可以使用isalpha()函数来判断输入的单词是否只包含字母,如果不是,则提示用户重新输入。 - 改进设想:可以添加大小写不敏感的检查机制,使程序能够识别大小写不同但是字母相同的单词。 4. 算法的改进设想: - 目前的算法使用了暴力枚举的方法,效率较低,特别是在词典比较大的情况下,需要枚举大量的可能性。可以考虑使用更高效的方法,例如哈希表或者字典树来进行优化。 - 另外,如果输入的单词比较长,也会导致枚举的可能性非常多,可以考虑使用一些剪枝技巧,例如只枚举长度相同的单词,或者只枚举字典中已经存在的前缀和后缀。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值