我想实现以下伪代码:
string foo; // or vector<int> foo;
auto itr = bar? foo.begin() : foo.rbegin();
auto end = bar? foo.end() : foo.rend();
for ( ; itr != end; ++itr) {
// SomeAction ...
}
Run Code Online (Sandbox Code Playgroud)
也就是说itr
,根据某些条件,我想设置为正向迭代器或反向迭代器,bar
以正向或反向扫描。
显然,这样的代码将不起作用,因为正向迭代器和反向迭代器具有不同的类型。
请注意,我不想分成两个循环,因为这些代码// SomeAction
将重复。
我怎样才能做到这一点?首选使用C ++ 11和/或更低版本的答案。
另外,请详细说明字符串和向量是否具有不同的解决方案。
C/C++:我可以从外部访问函数内的静态变量吗?例如:
#include <iostream>
using namespace std;
void f()
{
static int count = 3;
cout << count << endl;
}
int main(int argc, char** argv)
{
f::count = 5; // apparently this is an invalid syntax.
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 以下与条件表达式相关的代码:
typedef unsigned char uchar;
uchar data[100];
// assign something to array[] here
uchar *start = data;
uchar *end = data+100;
bool cond = f(); // f() could return true or false
uchar *itr = std::upper_bound(start, end, uchar(20),
cond? std::greater<uchar>() : std::less<uchar>());
Run Code Online (Sandbox Code Playgroud)
得到这样的错误:
error: operands to ?: have different types
‘std::greater<unsigned char>’ and ‘std::less<unsigned char>’
Run Code Online (Sandbox Code Playgroud)
这是编译器错误吗?根据我的直觉,这两个仿函数应该具有相同的类型.
在某些平台上,int32_t
(来自stdint.h)是long int
,但在其他平台上,它可能是int
.当我想使用时printf
,我如何确定"%ld"
或"%d"
应该使用哪种格式?
或者,也许,我应该强制将其转换为如下所示:
int32_t m;
m = 3;
printf ("%ld\n", (long)m);
Run Code Online (Sandbox Code Playgroud)
但这种解决方案很乏味.有什么建议?
我看过一些第三方源代码,其中包含/*M ... M*/
样式注释.但'M'代表什么?(也许它与某种版本控制或代码文档系统(如doxygen)一起使用?)
我在opencv中的许多(如果不是全部)源代码文件中看到了它.
您可以点击此处浏览Ititz在GitHub下的opencv存储库 .
哦.我忘了提一下,评论样式似乎只存在于文件的头部,而且它似乎宣布了许可证.
示例:
Run Code Online (Sandbox Code Playgroud)/*M/////////////////////////////////////////////////////////////////////////////////////// // // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // // By downloading, copying, installing or using the software you agree to this license. // If you do not agree to this license, do not download, install, // copy or use the software. // // // License Agreement // For Open Source Computer Vision Library [...] // //M*/
例如,USB 条码扫描器可以充当 HID 键盘来输入字符。但是,要输入英语以外的某些外语,例如 Unicode,HID 键盘可能会遇到困难。HID 键盘模仿键盘行为,这取决于所选的 IME。因此,它没有唯一的、通用的方式来输入某些 Unicode 字符。
是否有任何定义的“机器接口设备”(MID)而不是 HID?或如何实现 USB 设备(甚至 USB 以外的其他接口)以直接输入 Unicode 字符?
考虑以下程序:
#include <iostream>
using namespace std;
class Foo {
public:
int k;
operator int() {
cout << "convert int" << endl;
return k;
}
#if USE_COMPARE
bool operator < (int rhs) {
cout << "compare with" << endl;
return (k < rhs);
}
#endif
};
int main()
{
Foo f;
f.k = 3;
int m = 5;
if (f < m) {
cout << 1 << endl;
return 1;
}
cout << 0 << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当USE_COMPARE …
对于以下代码段:
class Bar {
public:
int x;
int y;
Bar(int _x, int _y) { /* some codes here */ ...}
};
class Foo {
public:
int x;
int y;
int z;
Foo(Bar b):x(b.x), y(b.y)
{
z = someFunction(x, y);
}
};
void f(int x, int y)
{
Bar b(x, y);
static Foo x(b);
}
int main()
{
f(2, 3);
}
Run Code Online (Sandbox Code Playgroud)
在我看来,函数内部的静态变量应该在之前初始化main()
.然而,静态变量x
类型Foo
取决于局部变量b
类型Bar
.
问题是:
1)什么时候x
执行构造函数?ie是否x
首次调用局部变量进行初始化b
?我不想要一些特殊的编译器案例的特定结果,但想知道它是否在C++语言中定义良好.
2)这是一个有效的计划吗? …
请问以下代码的第2行
int bar;
int foo = bar * 3 * 5;
Run Code Online (Sandbox Code Playgroud)
被优化为
int bar;
int foo = bar * 15;
Run Code Online (Sandbox Code Playgroud)
甚至更多:
int foo = 3 * bar * 5;
Run Code Online (Sandbox Code Playgroud)
可以优化吗?
目的实际上是问我是否可以写
int foo = bar * 3 * 5;
Run Code Online (Sandbox Code Playgroud)
代替
int foo = bar * (3 * 5);
Run Code Online (Sandbox Code Playgroud)
保存括号.(并且减轻了手动操作那些常量排序的需要=>并且在许多情况下,使用相关变量的分组常量更有意义,而不是为了优化而分组常量)
我已经在很多网站上搜索过这个,但都失败了。但是TDM在“TDM-gcc”中代表什么?当我想选择 gcc 作为编译器时,我很困惑。那么,有什么区别呢?我应该选择TDM还是NON-TDM?还是 TDM 仅适用于 minGW?在 Windows 平台上?
官方 TDM-gcc 站点甚至不解释它...
有没有一种方法可以将默认行结束模式设置为与git的系统默认(Cygwin的)不同?
我在Cygwin上同时使用了Windos-Git(即GitBash)和本地git。我的问题的根本原因是CYGWIN认为自己是un * x,因此默认的行尾设置为LF。但是,CYGWIN在Windows上运行,并且大多数其他协作软件,包括GitBash,都希望行结束模式为CRLF。
我之所以使用这两者,是因为我管理git数据库,并且需要确保不同git工具/客户端对不同工程师的可用性。
在Cygwin中,当我将core.crlf设置为true时,它不会为我将文本文件转换为CR / LF,因为Cygwin认为自己是un * x。
GIT中是否有设置告诉git强制git使用CR / LF,因为它是“自动”转换的默认设置?-或者-对于这种情况有解决方案吗?
说我有两个班A
,并B
和阶级的载体A
如下:
class A {
int foo;
int bar;
void someMethod();
};
class B {
uint foo;
uint bar;
void someOtherMethod();
};
std::vector<A> va;
Run Code Online (Sandbox Code Playgroud)
并且我想将其解释va
为B的向量,因为int
并且uint
可以重新解释.
重新解释的最佳做法是什么?例如,如果我想要调用someOtherMethod()
上va
,我能做到((std::vector<B> *)(&va))->someOtherMethod()
.但这是最好的做法吗?
在我看来,这reinterpret_cast<std::vector<B> >(va).someOtherMethod()
不起作用.
另外,我正在研究C++ 03.
- 更新 -
很抱歉我误解了自己的问题.然而,我的问题与这个问题有很大的不同.所以我创造了另一个问题在这里.
我将很快结束这个问题:这个问题可以看作是一个独立的问题,我认为下面的答案之一已经足够被接受了.
update-index --assume-unchanged
在Stackoverflow:Ignore Tracked文件中做了回答之后,如何列出这些文件?
我已经在很多文件上做了这个,现在我需要一个列表,以便我可以撤消效果...