这是我昨天提出的问题的后续行动.我有斯科特迈耶斯关于我写的只写代码的警告.我喜欢原则上使用标准算法来访问std :: map的键或值的想法,但所需的语法是一个小的巴洛克式恕我直言.假设我想将地图的所有键都转储到矢量中.鉴于以下声明,
typedef std::map<int, int> MyMap;
MyMap m;
std::vector<int> v;
Run Code Online (Sandbox Code Playgroud)
哪些代码更易于维护(即可能更少混淆)?
选项1:
std::transform(m.begin(),
m.end(),
std::back_inserter(v),
std::tr1::bind(&MyMap::value_type::first, _1));
Run Code Online (Sandbox Code Playgroud)
选项#2:
for (MyMap::iterator i = m.begin(); i != m.end(); ++i)
{
v.push_back(i->first);
}
Run Code Online (Sandbox Code Playgroud)
选项1是更标准的库,但我必须在精神上分解它以了解正在发生的事情.选项2似乎更容易阅读,代价是可能的小运行时惩罚.我没有因为CPU时间而受伤所以我倾向于选项2.你们同意吗?我应该考虑第三种选择吗?
PS在编写这个问题的过程中,我得出结论,读取std :: map键的最佳方法(对于我的项目)是将它们存储在一个侧容器中并迭代它.可维护性问题仍然存在.
我以前遇到过这个问题,但找到了解决办法,只是这次解决办法不是一种选择.
我正在尝试使用'stof'函数,但我收到的错误是:'stof'不是'std'的成员'函数'stof'无法解析
如果在此页面上显示,我正在使用它:http://www.cplusplus.com/reference/string/stof/
这是我的包括:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
Run Code Online (Sandbox Code Playgroud)
那么,我做错了什么?如果一个解决方案不能被发现可能有人点我的另一种方式将字符串转换为浮动,并把它抛出一个异常,如果字符串是不兼容?
编辑:使用示例程序和错误进行更新.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string testString = "";
float testFloat = 0.0;
testFloat = std::stof(testString);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
说明资源路径位置类型'stof'不是'std'main.cpp/Assignment/src第33行的成员C/C++问题
说明资源路径位置类型函数'stof'无法解析main.cpp/Assignment/src第33行语义错误
鉴于此类:
class C
{
private:
struct Foo
{
int key1, key2, value;
};
std::vector<Foo> fooList;
};
Run Code Online (Sandbox Code Playgroud)
这里的想法是fooList可以由Foo结构中的任何一个key1或者key2Foo结构索引.我正在尝试编写函子来传递给std::find_if我,所以我可以fooList通过每个键查找项目.但是我不能让它们编译,因为Foo它在类中是私有的(它不是C接口的一部分). 有没有办法在不暴露Foo于世界其他地方的情况下做到这一点?
这是一个不能编译的代码示例,因为Foo在我的类中是私有的:
struct MatchKey1 : public std::unary_function<Foo, bool>
{
int key;
MatchKey1(int k) : key(k) {}
bool operator()(const Foo& elem) const
{
return key == elem.key1;
}
};
Run Code Online (Sandbox Code Playgroud) 我正在尝试替换VMS上的文本文件中的特定行.通常,这是一个简单的Perl单线程.但是当替换方是包含VMS路径的符号时,我遇到了问题.这是文件和我尝试的内容:
file1.txt的内容:
foo
bar
baz
quux
Run Code Online (Sandbox Code Playgroud)
尝试替换第3行:
$ mysub = "disk$data1:[path.to]file.txt"
$ perl -pe "s/baz/''mysub'/" file1.txt
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
foo
bar
disk:[path.to]file.txt
quux
Run Code Online (Sandbox Code Playgroud)
看起来Perl过于苛刻,用$data1一个不存在的变量的内容替换了路径的一部分(即什么都没有).运行调试器确认了这一点.我没有提供/e,所以我认为Perl应该直接替换文本.有没有办法让Perl这样做?
(另请注意,我可以在linux命令行中重现类似的行为.)
set foldmethod=syntax
set foldlevelstart=1
let javaScript_fold=1 " JavaScript
let perl_fold=1 " Perl
let php_folding=1 " PHP
let r_syntax_folding=1 " R
let ruby_fold=1 " Ruby
let sh_fold_enabled=1 " sh
let vimsyn_folding='af' " Vim script
let xml_syntax_folding=1 " XML
Run Code Online (Sandbox Code Playgroud)
上下文:在编辑 sh 文件时
我认为在以下情况下放慢速度是合理的:
......但是...... 到处都这样做?
你用/看同样的吗?如果有的话,可以采取哪些措施来缓解这种迟缓?
我花了一天的时间来识别它,在我的(虚拟和非)机器上的任何地方成功地重现它,通过 vimrc 二进制搜索的过程消除了整体缓慢的候选贡献者.
vim VIM - Vi IMproved 7.3(2010年8月15日,编译2013年3月12日14:05:25)
osx OS X v10.8.3(build 12D78)
bash v3.2.48(1) - 发布
我知道RAII做了什么.当代码抛出异常时,它就是防止内存泄漏等.
现在,我希望了解这个聪明术语的含义. http://en.wikipedia.org/wiki/Acquisition
获得意味着获得某些东
那么,当我们说资源获取是初始化时,这意味着什么?
我只是在谈论这里的术语的含义,而不是一般的概念.
我的任务是实现用于实时模拟的消息传递系统.此系统中需要存在多种不同类型的消息传递对象,并且将来可能会添加更多消息传递对象.这些对象代表了sim中玩家之间的主要通信方式.假设我完全理解我的要求,可以通过以下属性定义消息传递对象:
模拟代码目前仅支持一种发送和接收协议以及一种消息格式.我的工作是使代码更具可扩展性,以便它可以支持将来对协议和消息结构的更改/添加.对此的第一个方法是为每个属性定义抽象基类,并让每个消息传递对象由它们的句柄组成.然后可以将每个消息传递对象写为协议和格式对象的不同组合.我担心的是,这种设计很快就会过度概括,从而成为维护的噩梦.我想通过十几个文件进行筛选只是为了弄清楚它是如何FooMessaging真正起作用的.
我将用C++编写这个,但我认为这更像是一个通用的设计问题.我可以在这里申请任何"标准"模式或最佳实践吗?
我一直在家写小Python程序来学习更多关于语言的知识.我试图理解的最新功能是List Comprehensions.我创建了一个小脚本,根据我过去换油的频率来估计我的汽车何时需要换油.在下面的代码片段中,oil_changes列出了我更换石油的里程数.
# Compute a list of the mileage differences between each oil change.
diffs = [j - i for i, j in zip(oil_changes[:-1], oil_changes[1:])]
# Use the average difference between oil changes to estimate the next change.
next_oil = oil_changes[-1] + sum(diffs) / len(diffs)
Run Code Online (Sandbox Code Playgroud)
代码产生了正确的答案(手动数学检查)但它感觉不到Pythonic.我在第一行做了很多不必要的原始列表复制吗?我觉得有更好的方法可以做到这一点,但我不知道它是什么.
我正在编写一个代码来接收密码输入.下面是我的代码...程序运行良好,但问题是除了数字和字母字符之外的其他键也被读取,例如删除,插入等等我能否知道如何避免它?TQ ...
string pw="";
char c=' ';
while(c != 13) //Loop until 'Enter' is pressed
{
c = _getch();
if(c==13)
break;
if(c==8)
{
if(pw.size()!=0) //delete only if there is input
{
cout<<"\b \b";
pw.erase(pw.size()-1);
}
}
if((c>47&&c<58)||(c>64&&c<91)||(c>96&&c<123)) //ASCii code for integer and alphabet
{
pw += c;
cout << "*";
}
}
Run Code Online (Sandbox Code Playgroud) 我正在处理以下代码.
#include <iostream>
int main()
{
std::cout << "Enter numbers separated by whitespace (use -1 to quit): ";
int i = 0;
while (i != -1) {
std::cin >> i;
std::cout << "You entered " << i << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
我知道使用while (std::cin >> i)本来会更好,但我不明白具体的情况.如果我提供无效输入,则循环变为无限,因为输入流进入故障位状态.我的问题是输入变量会发生什么i?就我而言,无论先前输入的值如何,它都变为0.输入无效后为什么会变为0?这是预定义的行为吗?