假设我想迭代一系列双打并求它们.我有两种方法可以做到这一点.
一个)
double sum (double * series, int size) {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += *series++;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
B)
double sum (double * series, int size) {
double sum = 0.0;
for (int i = 0; i < size; i++) {
sum += series[i];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
这是更好的,为什么/何时我应该使用一个而不是另一个.
我有一个简单的程序,它使用在命令行上传递给它的一系列语言环境来测试wchar_t和char之间的转换.它通过打印出语言环境名称和无法转换的字符串输出失败的转换列表.
我正在使用clang和libc ++构建它.我的理解是libc ++的命名语言环境支持由OS X上的xlocale库提供.
我看到一些意外的失败,以及转换失败的一些情况,但事实并非如此.
这是程序.
#warning call this program like: "locale -a | ./a.out" or pass \
locale names valid for your platform, one per line via standard input
#include <iostream>
#include <codecvt>
#include <locale>
#include <array>
template <class Facet>
class usable_facet : public Facet {
public:
// FIXME: use inheriting constructors when available
// using Facet::Facet;
template <class ...Args>
usable_facet(Args&& ...args) : Facet(std::forward<Args>(args)...) {}
~usable_facet() {}
};
int main() {
std::array<std::wstring,11> args = {L"a",L"é",L"¤",L"€",L"??",L"?",L"?",L"?",L"?",L"?",L""};
std::wstring_convert<usable_facet<std::codecvt_utf8<wchar_t>>> u8cvt; // …Run Code Online (Sandbox Code Playgroud) 将两个字节打包成一个的最快方法是什么?我有一个很大的字节数组。每个字节代表一个不大于 15 的数字(4 位数字)。因此,我可以将两个字节合并为一个,将第一个字节放入高半字节,将后面的字节放入低半字节。
我目前的方法是创建一个原始数组一半大小的第二个数组,然后迭代原始数组移动它和 | 得到小点心。这有效,但是根据数组的大小需要一段时间。数组从几千个条目到几百万个条目不等。这不是灾难性的,但任何优化都会有所帮助
我不知道是否允许在这里提出这个问题,但我会尝试任何方式.
我正在寻找一种简单的编程语言供普通用户理解和编写,因为我正在制作一款游戏.我正在用C++构建我的框架.
我在考虑Lua,但我认为这对普通用户来说可能太难了.
只需要前进,射击,抓住这个,把它放在这里等基本动作.这是一款基于平铺的游戏.
我目前无法在-32.768和32.768之间生成随机数.它不断给我相同的值,但十进制字段的变化很小.例如:27.xxx.
继承我的代码,任何帮助将不胜感激.
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand( time(NULL) );
double r = (68.556*rand()/RAND_MAX - 32.768);
cout << r << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在Windows上用C++来测量以纳秒为单位的时间?
我能找到的只是linux解决方案.
我有一个使用 freetype 的 MSVC 项目,现在我正在尝试将其移至 Unicode。但是 freetype 函数不接受文件路径的 LPCTSTR 参数,它们需要“const char*”。所以代码就像
WINDOWS_FONT WindowsFont;
// ....
FT_New_Face (pLibrary, WindowsFont.pszFileName, i, &face); // WindowsFont.pszFileName is LPTSTR
Run Code Online (Sandbox Code Playgroud)
曾经在项目是 ascii 时工作,但在 Unicode 时不再工作。有没有办法让 freetype 接受 Unicode 文件名,一些预处理器定义可能将其切换为 unicode?
我很确定这是一个基本问题,但我无法在任何地方找到答案(可能是因为错误的搜索条件).
以下代码是否会造成内存泄漏?
int * ptr= new int(15);
ptr= new int(25);
Run Code Online (Sandbox Code Playgroud)
new在第二次在同一指针上调用操作符之前,是否必须删除第一个指针?
在解释和创建函数参数的类型时,我很难理解为什么C++比C更"放松"的行为.
C做世界上最简单的事情,它坚持你写的东西就是这样,另一方面,C++以一种我无法理解的扭曲方式运作.
例如,流行的argv是一个char* []传递给函数的时候变成了char**,我真的不明白为什么,我期待和"想要" char * const *但是我得到了这种行为.
您还可以阅读PDF中讨论C和C++之间差异的文章,文章也以这句话结尾:
虽然C++在确定函数签名时会忽略参数声明中的顶级cv限定符,但它并不完全忽略这些cv限定符.
因为我在网上找不到这个问题(嵌入式系统编程 - 2000年2月,这个老问题是免费的),我想知道这句话可能意味着什么.
有人可以解释为什么这种行为是它在C++中的行为?
编辑:
我的一个例子是
#include <stdio.h>
void foo(int argc, const char *const *const argv) {
printf("%d %s\n", argc, argv[0]);
}
int main(int argc, char *argv[]) {
foo(argc, argv);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
如果你编译它,gcc 4.8.1你得到预期的错误
gcc cv_1.c
cv_1.c: In function ‘main’:
cv_1.c:8:3: warning: passing argument 2 of ‘foo’ from incompatible pointer type [enabled by default]
foo(argc, argv);
^
cv_1.c:3:6: …Run Code Online (Sandbox Code Playgroud)