我知道如何使用非平凡的初始值填充std :: vector,例如序列号:
void IndexArray( unsigned int length, std::vector<unsigned int>& v )
{
v.resize(length);
for ( unsigned int i = 0; i < length; ++i )
{
v[i] = i;
}
}
Run Code Online (Sandbox Code Playgroud)
但这是一个for循环.有没有一种优雅的方法来使用stl功能(而不是使用Boost)使用更少的代码行?
使用字符串作为主键而不是bigints等会有什么性能损失?字符串比较比整数比较昂贵得多,但另一方面,我可以想象在内部DBMS将计算散列键以减少惩罚.
我工作的应用程序使用字符串作为几个表(MySQL)中的主键.改变这一点并非易事,我想知道可以通过哪些方式获得合理的工作.
使用其他类(作为成员或作为方法的参数)的类需要具有适合单元测试的实例.如果你有这些类可用并且没有引入其他依赖项,那么使用真实的东西而不是模拟更好吗?
循环展开是帮助编译器优化性能的常用方法.我想知道是否以及在多大程度上性能增益受到循环体内的影响:
你用什么规则来决定是否要解除性能关键循环?在这些情况下,您还考虑了哪些其他优化?
可能重复:
C#中的"const correctness"
我已经编写了很多年的C++,但对C#来说还是比较新的.在学习C#时,我发现const关键字的使用比C++更有限.例如,AFAIK 没有办法向函数const声明参数.我觉得我可能无意中改变我的函数参数(可能是复杂的数据结构),我只能通过测试来检测,这让我感到很不舒服.
你是如何处理这种情况的?
我怎么可以移植(我最感兴趣的是windows和linux)在指定的目录中生成一个新的文件名,带有指定的文件名前缀和后缀?
std::string UniqueName(std::string const& dir, std::string const& prefix,
std::string const& suffix);
Run Code Online (Sandbox Code Playgroud)
任何实现此功能的建议,尽可能少地明确依赖于特定平台.
昨天我遇到了一个g ++(3.4.6)编译器问题,我编译的代码使用Intel(9.0)编译器没有问题.这是一个代码片段,显示发生了什么:
template<typename A, typename B>
class Foo { };
struct Bar {
void method ( Foo<int,int> const& stuff = Foo<int,int>() );
};
Run Code Online (Sandbox Code Playgroud)
g ++编译器错误是:
foo.cpp:5: error: expected `,' or `...' before '>' token
foo.cpp:5: error: wrong number of template arguments (1, should be 2)
foo.cpp:2: error: provided for `template<class A, class B> struct Foo'
foo.cpp:5: error: default argument missing for parameter 2 of `void Bar::method(const Foo<int, int>&, int)'
Run Code Online (Sandbox Code Playgroud)
显然,当以这种方式编写时,不接受默认参数,并且编译器假定指定了新的函数参数而不是第二个模板参数,然后它需要一个默认值,因为stuff
参数有一个.我可以通过创建一个typedef来帮助编译器,然后一切编译都很好:
template<typename A, typename B>
class Foo { }; …
Run Code Online (Sandbox Code Playgroud) 如果您被允许在"C++编码标准"(Herb Sutter和Andrei Alexandrescu)的101指南中添加另一个编码指南,您会添加哪些?
我们来自一个颠覆背景,我们有一个QA经理,一旦他确认所有QC活动都已完成,他就会向中央存储库提供提交权限.
我和几个同事开始使用mercurial,我们希望有一个包含我们QC-ed更改的共享存储库.每个开发人员都会克隆存储库并将其更改推送回共享存储库.我已经阅读了HG init教程并浏览了红豆书,但无法找到如何控制允许谁将更改推送到共享存储库.
我们现有的QA-manager控制提交模型将如何转化为一个多变的"中央"存储库?
我正在编写shell脚本,其中很多时候会将一些东西写入文件,然后执行一个读取该文件的应用程序.我发现,通过我们公司,网络延迟差别很大,因此一个简单sleep 2
的例子就不够健壮.
我试着编写一个(可配置的)超时循环,如下所示:
waitLoop()
{
local timeout=$1
local test="$2"
if ! $test
then
local counter=0
while ! $test && [ $counter -lt $timeout ]
do
sleep 1
((counter++))
done
if ! $test
then
exit 1
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
这适用于test="[ -e $somefilename ]"
.但是,测试存在是不够的,我有时需要测试某个字符串是否写入文件.我试过了
test="grep -sq \"^sometext$\" $somefilename"
,但这没用.有人可以告诉我为什么吗?
是否有其他更简洁的选项来执行此类测试?
c++ ×6
algorithm ×1
bash ×1
c# ×1
coding-style ×1
database ×1
g++ ×1
gcc ×1
intel ×1
ksh ×1
latency ×1
mercurial ×1
mocking ×1
mysql ×1
optimization ×1
performance ×1
primary-key ×1
stl ×1
templates ×1
unit-testing ×1