不要混淆如何拆分字符串解析明智,例如:
在C++中拆分字符串?
关于如何在c ++中将字符串拆分为多行,我感到有点困惑.
这听起来像一个简单的问题,但请采取以下示例:
#include <iostream>
#include <string>
main() {
//Gives error
std::string my_val ="Hello world, this is an overly long string to have" +
" on just one line";
std::cout << "My Val is : " << my_val << std::endl;
//Gives error
std::string my_val ="Hello world, this is an overly long string to have" &
" on just one line";
std::cout << "My Val is : " << my_val << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使用这个std::string
append()
方法,但我想知道是否有任何更短/更优雅(例如更多pythonlike,但显然三重引号等在c ++中不支持)的方式将c ++中的字符串分解为多行为了缘故可读性. …
我在Stack Overflow中搜索了类似函数的宏与内联函数的优缺点.
我发现了以下讨论: C中不同宏函数/内联方法的优缺点
......但它没有回答我的主要问题.
也就是说,在内存使用和执行速度方面,使用宏函数(带有变量,可能还有其他函数调用)和内联函数的开销是多少?
开销中是否存在编译器相关的差异?我同时拥有icc和gcc.
我模块化的代码片段是:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)
我将其转换为内联函数/宏的原因是我可以将其放入ac文件中,然后有条件地编译其他类似但略有不同的函数/宏.
例如:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)
(注意第二行的差异......)
这个函数是我的代码的核心功能,在我的程序中每步调用数千次,我的程序执行数百万步.因此,我希望尽可能减少开销,因此我浪费时间来担心内联的转换,将代码转换为宏.
根据之前的讨论,我已经意识到宏的其他优点/缺点(类型独立性和由此产生的错误)...但我最想知道的,目前不知道的是性能.
我知道你们中的一些C老兵会对我有一些很好的见解!
反向工程代码,我对这种风格感到震惊,但我想确保没有充分理由做这些事情....
它只是我还是一种可怕的编码风格
if ( pwbuf ) sprintf(username,"%s",pwbuf->pw_name);
else sprintf(username,"%d",user_id);
Run Code Online (Sandbox Code Playgroud)
为什么包装代码不打算用于编译
#if 0
....
#endif
Run Code Online (Sandbox Code Playgroud)
而不是评论?
编辑:正如下面的一些解释,这是由于flummox/**/的可能性,我没有意识到.
但我仍然不明白,为什么不使用你的编程环境工具或喜欢的文本编辑器的宏来阻止使用"//"注释掉它
难道这不会更直接,更容易知道在视觉上跳过?
我只是缺乏C经验并且错过了为什么这些东西可能是一个好主意 - 或者没有任何借口,我有理由对这段代码的丑陋感到恼火?
我正在对一些代码进行逆向工程并遇到了这个......
/************************************************************************/
/* */
/* MACRO CHECK_FREAD */
/* */
/* CHECK_FREAD is used to check the status of a file read. It */
/* is passed the return code from read and a string to print out if */
/* an error is detected. If an error is found, an error message is */
/* printed out and the program terminates. This was made into a */
/* macro because it had to be done over and over and …
Run Code Online (Sandbox Code Playgroud) 我正在移植使用大量浮点数的代码,这可能会触发从c到c ++的malloc失败.我问了一个关于我是否应该使用矢量或deques的问题,Niki Yoshiuchi慷慨地给了我一个安全包装类型的例子:
template<typename T>
class VectorDeque
{
private:
enum TYPE { NONE, DEQUE, VECTOR };
std::deque<T> m_d;
std::vector<T> m_v;
TYPE m_type;
...
public:
void resize(size_t n)
{
switch(m_type)
{
case NONE:
try
{
m_v.resize(n);
m_type = VECTOR;
}
catch(std::bad_alloc &ba)
{
m_d.resize(n);
m_type = DEQUE;
}
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
我需要一个2D矢量/ deque deques的矢量,所以我将其修改为以下代码:
template<typename T>
class VectorDeque
{
private:
enum STORAGE_CONTAINER { NONE, DEQUE, VECTOR };
std::deque<std::deque<T> > x_d,y_d,z_d;
std::vector<std::vector<T> > x_v,y_v,z_v;
TYPE my_container;
public:
void resize(size_t …
Run Code Online (Sandbox Code Playgroud) tl;博士版:
有没有的时候(如果有的话)使用的基准或语法的例子c++
,而不是JS
在Qt 5.7
和/或定义的性能JS
对比c++
中Qt 5.7
证实后者的确是更快的文档对于项目的状态.
深入的背景
我对QML
/ 的世界有些新意,Qt
并且我正在尝试学习最佳实践和方法,以便总体上提供适合在嵌入式系统上最终部署的快速而强大的代码.
至于谁是偶尔涉猎很长一段时间C++开发者JavaScript
,我总是从有经验的听说JS
开发商,在大多数情况下,c++
代码编译在快速之类的编译icpc
与优化的表现将优于JS
编译字节码的形式,甚至(深入Mozilla的开发官方博客讨论这个) .这确实是我自己有限的经历JS
.
因此,我有点惊讶地读到Qt 5.7
" Qt文档 ">" 性能注意事项和建议 ">" Javascript
"状态:
大多数QML应用程序将以动态函数,信号处理程序和属性绑定表达式的形式包含大量JavaScript代码.这通常不是问题.由于QML引擎中的一些优化,例如对绑定编译器所做的那些优化,它可以(在某些用例中)比调用C++函数更快.但是,必须注意确保不会意外触发不必要的处理.
这条评论描绘了一幅非常有趣的图片,但我无法根据现实世界的测试案例找到相关信息.
问题:在现实世界中量化Qt应用程序c ++与JS
我的问题是:
Javascript
?c++
仍然可以提供性能优势JS
与QML
/ Qt
code 一起使用?(IO?)与Qt Javascript相关的可量化性能信息的示例
为了在文档中定义语句,我给出了一些可量化信息的例子,我一直在寻找这些 …
任何人都可以用英语解释这个sed单行(更详细,更好)?
@sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' < $*.d > $@; \
rm -f $*.d; [ -s $@ ] || rm -f $@
Run Code Online (Sandbox Code Playgroud)
这是本教程的一部分:http: //mad-scientist.net/make/autodep.html
我有一组非常量的源文件,并希望根据源文件中拼写的内容(包括)自动生成我的依赖树.
我很好地遵循了教程,直到...
PS我对sed select/replace有基本的了解,但我对匹配的字符串和重定向的所有层感到困惑....我还阅读了makefile教程一次,因此具备标准 makefile的基本知识......
我需要编写一个脚本来执行以下操作:
注:二维数组将是我的程序婉转有用的,但我目前正在与几个一维数组(由于bash脚本中的数组的限制)使所致.
这些任务似乎都有点"重壳",因为它很容易用一堆shell命令实现,所以我认为Bash脚本是一种自然的方式.到目前为止,我的结果还不错,但在我开始重构和完成代码之前,我想知道将它移植到Python是否更好.我已经在很多地方读过Python对bash"优越"的看法.我已经完成了一些Python脚本,据我所知,这是因为它有更多的内置库并且支持面向对象的编程.但是,我见过的所有脚本都使用shell命令,例如:http: //magazine.redhat.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/
实现令人讨厌的语法,比如必须将命令定义为变量,如下所示:
#You could add another bash command here
#HOLDING_SPOT="""fake_command"""
#Determines Home Directory Usage in Gigs
HOMEDIR_USAGE = """
du -sh $HOME | cut -f1
"""
#Determines IP Address
IPADDR = """
/sbin/ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1
"""
Run Code Online (Sandbox Code Playgroud)
......并且需要包装功能和其他乐趣.
我只是愚蠢还是看起来不那么直观?使用Python有速度优势,它会超过Bash在shell脚本命令方面的简单优势吗?或者bash(没有2D数组,大括号/括号错综复杂)的语法是否有理由跳转到Python?
我有一组位标志,用于我从C到C++移植的程序.
开始...
我程序中的标志以前定义为:
/* Define feature flags for this DCD file */
#define DCD_IS_CHARMM 0x01
#define DCD_HAS_4DIMS 0x02
#define DCD_HAS_EXTRA_BLOCK 0x04
Run Code Online (Sandbox Code Playgroud)
...现在我已经收集了常量的#defines(与类常量等相比)通常被认为是不好的形式.
这引发了关于如何最好地在c ++中存储位标志以及为什么c ++不支持将二进制文本分配给int的问题,就像它允许以这种方式分配十六进制数字(通过"0x").这篇问题总结在本文末尾.
我可以看到一个简单的解决方案是简单地创建单个常量:
namespace DCD {
const unsigned int IS_CHARMM = 1;
const unsigned int HAS_4DIMS = 2;
const unsigned int HAS_EXTRA_BLOCK = 4;
};
Run Code Online (Sandbox Code Playgroud)
我们称这个想法为1.
我的另一个想法是使用整数枚举:
namespace DCD {
enum e_Feature_Flags {
IS_CHARMM = 1,
HAS_4DIMS = 2,
HAS_EXTRA_BLOCK = 8
};
};
Run Code Online (Sandbox Code Playgroud)
但令我困扰的一件事是,当涉及更高的价值时,它似乎不那么直观......似乎......
namespace DCD {
enum e_Feature_Flags {
IS_CHARMM = 1,
HAS_4DIMS = 2, …
Run Code Online (Sandbox Code Playgroud) 编辑:
目标: 通过从公共变量的功率计算中重新使用预先计算/缓存的功率,
生成一种无处不在的方法,以获得优于内置功能的自定义功率函数pow(double, uint)
.
已经做了什么:
我已经得到了这样一个比内置快大约40%的函数,但是这是一个强力的手动派生函数 - 我想要一种自动生成这样的电源功能块的方法任意uint
权力.
的已知,
要获得最佳定制,pow(double, uint)
您需要一些知识.对于这个问题,知识(澄清)是:
N_MAX
).r2
中r4
,和r6
).r2
无论其他预先计算的功率如何,都可以假设方形总是被计算出来.解决方案要求
需要单独的程序来编写case
查找表或预处理器逻辑以生成这样的表的最佳解决方案是可接受的,然而,不会接受使用手动生成的(即强力导出的)查找表的非最佳解决方案. (正如我已经那样,并且在我的例子中表明......想法是远离这个).
可能的解决途径
作为一个建议,你知道N_MAX
和一组预先计算的权力B
(B={2,4,6}
对于我的例子).你可以在一个单独的程序中或在预处理器中生成一个所有正方形的表格Sq(Bi, x
<= N_MAX . You can use this to form a basis set
A , which you then search somehow to determine the least number of terms that can be summed to produce an arbitrary …
c++ ×5
c ×4
coding-style ×2
inline ×2
macros ×2
optimization ×2
performance ×2
bash ×1
benchmarking ×1
binary ×1
compilation ×1
deque ×1
file-io ×1
flags ×1
iterator ×1
javascript ×1
linux ×1
makefile ×1
math ×1
pow ×1
python ×1
qml ×1
qt ×1
readability ×1
refactoring ×1
sed ×1
shell ×1
string ×1
syntax ×1
vector ×1