小编Vel*_*ria的帖子

为什么我的复制构造函数在这种情况下只调用了两次?

我有以下两个功能:

Class foo(Class arg)
{
    return arg;
}

Class bar(Class *arg)
{
    return *arg;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我单独调用foo(arg)时,复制构造函数当然会被调用两次.当我单独调用bar(&arg)时,它只调用一次.因此,我期待

foo(bar(&arg));
Run Code Online (Sandbox Code Playgroud)

复制构造函数在这里被调用三次.但是,它仍然只被调用两次.这是为什么?编译器是否识别出不需要另一个副本?

提前致谢!

c++ pointers call-by-value

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

为什么C中的linecount没有工作?

我正在尝试阅读一个文本文件但在此之前我想知道我要阅读的元素数量.所以我需要计算文本文件的行数.到目前为止,我有这个:

int getLinecount (char *file) 
{
    int ch, count = 0;
    FILE *fp = fopen(file, "r");
    if(fp == NULL)
    {
        return -1;
    }
    while((ch = fgetc(fp)) != EOF)
    {
        if (ch == '\n'); 
        {
            count++;
        }
    }
    fclose(fp);
    return count;
}
Run Code Online (Sandbox Code Playgroud)

这很好用.我没有对文本文件做任何改变,但仍打印130,000,尽管文件只有10,000行.我在我的主要内容中唯一写的是:

linecount = getLinecount("...");
Run Code Online (Sandbox Code Playgroud)

我真的很好奇错误在哪里.此外,是否有更好的选择获得linecount?

c line-count

4
推荐指数
1
解决办法
236
查看次数

布局内容更改后,将 QMainWindow 调整为最小尺寸

我正在使用 的子类QMainWindow,在其中声明了一个中央小部件。该小部件除其他外,还包含一个QGridLayout,其中包含一组按钮。按钮的数量可以增加或减少,具体取决于用户的输入。间距设置为零,以便所有按钮都聚集在一起。默认情况下,它看起来像这样:

默认布局

如果按钮数量增加,网格和窗口会增长得很好;但是,如果按钮数量减少,它将如下所示:

布局错了

现在我想调整窗口/布局/小部件的大小,以便所有按钮都可以使用最小的空间。我尝试了各种方法,但都无济于事。我查看了这个这个问题,以及 Qt 板上的各种线程,但没有一个对我有用。

我的布局构建如下:

self.grid = QtGui.QGridLayout()
self.grid.setSpacing(0)

hBox = QtGui.QHBoxLayout()
hBox.addWidget(...)

vBox = QtGui.QVBoxLayout(self.widget)
vBox.addLayout(hBox)
vBox.addLayout(self.grid)

self.setCentralWidget(self.widget)
Run Code Online (Sandbox Code Playgroud)

我试着用...调整它的大小

self.widget.layout().activate()
self.resize(self.minimumSize())
# self.resize(self.sizeHint())
Run Code Online (Sandbox Code Playgroud)

...以及其他各种方法。我还尝试设置窗口和网格的大小策略。

python layout qt pyqt qmainwindow

4
推荐指数
1
解决办法
2180
查看次数

两个字符之间所有内容的正则表达式

我正在尝试构建一个正则表达式,允许我删除字符串中的标签.这些标签看起来像这样:{...}.\{.*\}到目前为止我已经尝试过,但遗憾的是,如果这些标签出现两次,这将无效.例如:{123} Hello {asdas}.整个行将被删除,因为它以{开头并以}结尾.那么,我该如何避免这种行为呢?

提前致谢.

regex

3
推荐指数
1
解决办法
5582
查看次数

如何使用ParallelStream将一个数组的每个元素添加到另一个数组的相应元素?

我试图做的可能是使用一个例子更容易解释.我们假设我必须遵循两个数组:

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

我想要的是将i第二个数组的每个元素添加到i第一个数组的每个元素.当然,创建第三个数组也没关系.

在这个例子中,结果将是: 2, 4, 6, 8, 10

我可以在Java 8中使用ParallelStream以某种方式执行此操作吗?我只能想到使用至少一个索引的解决方案,并且由于并行性(这也违背了目的)它们并不真正起作用.

这种单线程方法有效:

AtomicInteger i = new AtomicInteger(0);
int resultArray[] = Arrays.stream(firstArray)
                          .map(a -> a + secArray[i.getAndIncrement()]).toArray();
Run Code Online (Sandbox Code Playgroud)

但是如果我使用并行流尝试这个,结果(当然它们是)随机的,程序真的很慢.有任何想法吗?

java arrays java-8

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

标签 统计

arrays ×1

c ×1

c++ ×1

call-by-value ×1

java ×1

java-8 ×1

layout ×1

line-count ×1

pointers ×1

pyqt ×1

python ×1

qmainwindow ×1

qt ×1

regex ×1