小编Oma*_*man的帖子

132
推荐指数
4
解决办法
2万
查看次数

重载处理std :: endl?

我想定义一个类,MyStream以便:

MyStream myStream;
myStream << 1 << 2 << 3 << std::endl << 5 << 6 << std::endl << 7 << 8 << std::endl;
Run Code Online (Sandbox Code Playgroud)

给出输出

[blah]123
[blah]56
[blah]78
Run Code Online (Sandbox Code Playgroud)

基本上,我想在前面插入一个"[blah]",然后在每次非终止 后插入std::endl

这里的困难不是逻辑管理,而是检测和重载处理std::endl.有一种优雅的方式来做到这一点?

谢谢!

编辑:我不需要有关逻辑管理的建议.我需要知道如何检测/过载打印std::endl.

c++ iostream overloading manipulators endl

31
推荐指数
2
解决办法
1万
查看次数

在初始化C/C++多维数组时省略大小

我对C/C++编译器的了解是,它们在初始化多维数组时忽略了内部括号.

所以,你不能这样做:

int myArray[][] = { { 2, 3 }, { 4, 5 }, { 4, 1 } };
Run Code Online (Sandbox Code Playgroud)

因为编译器会完全看到它

int myArray[][] = { 2, 3, 4, 5, 4, 1 };
Run Code Online (Sandbox Code Playgroud)

现在它不知道它是6*1,3*2,2*3,1*6,还是其他东西(因为这可能是部分初始化列表,不一定完整).

我的问题是,为什么这在许多编译器中都有效?

int myArray[][2] = { { 2 }, { 4, 5 }, { 4, 1 } };
Run Code Online (Sandbox Code Playgroud)

编译器"直观地"将其视为:

int myArray[][2] = { { 2, 0 }, { 4, 5 }, { 4, 1 } };
Run Code Online (Sandbox Code Playgroud)

这意味着它不会忽略大括号.到目前为止,我已经在三个不同的编译器上尝试了它并且都工作了.

我希望答案是"这只是编译器依赖".我无法访问该标准,因此请提供标准的答案.我不需要直觉,我有我的.

c c++ initialization multidimensional-array

26
推荐指数
2
解决办法
3186
查看次数

如何在没有递归或堆栈但使用父指针的情况下进行BST的有序遍历?

是否有可能在BST上进行迭代按顺序遍历,其中BST的节点有父指针(根的父节点null),而不使用visited标志或stack

我用谷歌搜索,没有找到答复.重点是,我怎么能知道 - 在某个节点 - 我刚刚来到它而已经完成了它下面的一切?

iteration algorithm tree-traversal inorder binary-search-tree

13
推荐指数
3
解决办法
2万
查看次数

-1u是有效的c ++吗?

例如

size_t x = -1u;

if (x == -1u)
    ...
Run Code Online (Sandbox Code Playgroud)

有效?

如果这是有效的,它将阻止警告.当然在32位系统上x应该是0xffffffff而在64位系统上它应该是0xffffffffffffffff.

-Jochen

c++ platform-independent

11
推荐指数
2
解决办法
1007
查看次数

std :: map键的要求(设计决策)

当我做一个时std::map<my_data_type, mapped_value>,C++对我的期望是它my_data_type有自己的operator<.

struct my_data_type
{
    my_data_type(int i) : my_i(i) { }

    bool operator<(const my_data_type& other) const { return my_i < other.my_i; }

    int my_i;
};
Run Code Online (Sandbox Code Playgroud)

原因是,你可以得到operator>operator==operator<.b <a暗示a> b,所以有operator>.!(a <b)&&!(b <a)表示a既不小于b也不大于b,所以它们必须相等.

问题是:为什么C++设计器不需要operator==明确定义?显然,从中删除重复operator==是不可避免std::map::find()std::map.为什么要实现5次操作并调用方法两次才能强迫我明确实现operator==

c++ stl map user-defined-types

11
推荐指数
1
解决办法
4635
查看次数

如何从Perl的DBI获取模式?

我正在使用Perl DBI.我知道$dbase->tables()将返回相应数据库中的所有表.同样,我想知道数据库中可用的模式.有没有可用的功能?

perl schema dbi

6
推荐指数
1
解决办法
5966
查看次数

为什么我们需要在C++中使用`class`,当`struct`可以用来实现同样的?

使用a struct我们可以实现class:构造函数(可以修改/重载),析构函数(可以修改/重载),运算符重载,实例方法,静态方法,public/ private/ protected字段/方法的所有功能.

那为什么我们需要class呢?

注意:我不希望答案说明struct,字段/方法是public默认的.

c++ struct class

6
推荐指数
1
解决办法
3793
查看次数

多数投票算法 - 错误?

如果存在这样的元素,则多数表决算法决定序列中的哪个元素占多数.这是我在试图理解它时发现的最常被引用的链接.

http://www.cs.utexas.edu/~moore/best-ideas/mjrty/index.html

此外,我们在这里有一个讨论问题的链接:

如何找到重复至少N/2次的数组元素?

问题是标记为正确的答案是错误的.请注意,该问题实际上允许输入具有单个元素的正好 N/2个副本(不一定多于 N/2,如通常在多数元素检测算法中假设的那样).

我复制了代码并尝试使用[1,2,3,2]和[1,2,3,2,6,2]等输入(产生3和6的结果).这实际上也适用于上面引用的算法(返回"无多数元素!").问题在于:只要多数元素和其他任何元素之间存在交替,就会选择数组中不是多数元素的最后一个元素.请更正我的错误想法,并告诉我如何在实施中避免它.

c algorithm

5
推荐指数
1
解决办法
3707
查看次数

Visual Studio启动可执行文件并自行启动它之间的区别?

我在C#4.0(VS2010)中处理应用程序,我有一个非常奇怪的情况.我向所有团队报告了一个错误,我总是无法重现它,直到其他开发人员告诉我双击可执行文件并按照错误的方案而不是从VS2010启动它.

经过一些研究,我发现大多数关于这个问题的评论都是关于未初始化的堆内存等,但是在C++上下文中.我知道如果变量未初始化,C#会产生错误而不是警告,所以这很可能不是问题所在.

我的机器和用户的两个版本都是相同的,我现在知道按F5(从调试开始)不会产生问题,而Ctrl + F5会产生问题.所以问题不在于两者之间的区别(其他问题已经解决了),而是:如何将调试器附加到C#进程会影响其行为?!

代码通过网络创建连接.

c# visual-studio-2010 visual-studio-debugging

5
推荐指数
1
解决办法
369
查看次数

这个改组算法有什么问题吗?

我一直在做一些休闲度假计算.我的迷你项目是对意大利"tomboli"游戏的模拟.一个关键的构建模块是对以下过程的模拟;

游戏由一个男人控制,一袋90个大理石,编号为1到90.他从包里随机抽出弹珠,每次都给玩家打出大理石号码.

经过一番思考后,我为这个构建块编写了以下代码;

// NBR marbles, numbered 1...NBR are in a bag. Simulate randomly
//  pulling them from the bag, one by one, until the bag is empty
void bag( int random_sequence[NBR] )
{
    int i;

    // Store each marble as it is pulled out
    int *store = random_sequence;

    // Array of marbles still in the bag
    int not_yet_pulled[NBR];
    for( i=0; i<NBR; i++ )
        not_yet_pulled[i] = i+1;    // eg NBR=90; 1,2,3 ... 90

    // Loop pulling marbles from the bag, …
Run Code Online (Sandbox Code Playgroud)

c c++ random algorithm simulation

4
推荐指数
3
解决办法
1783
查看次数

std :: endl和\n之间的区别(关于平台意识)

在你宣布这个问题进行重复这个那个,请考虑,我已经提交了一个问题,在线法官\n,得到了WA,然后用std::endl,得到了交流.所以,我需要一个非常具体的答案来解决平台意识:\n真的是平台意识,并且运行时是否真的根据平台写出正确的行结尾,因为其他问题的答案主张?如果是这样,你能告诉我这是怎么发生的吗?

如果答案可以通过关于平台意识问题的标准的引用来支持,我会非常感激.我已经阅读了所有其他问题的答案(即使是封闭的答案),所以请不要重复"冲洗缓冲区"的事情.

c++ platform endl

2
推荐指数
2
解决办法
710
查看次数