如何"do, if expression increased"?

How to "do, if expression increased"?

本文关键字:increased expression do 如何 if      更新时间:2023-10-16

我有比特币源代码(多线程),我打算添加一些新行。在比特币网络上,数据消息在矢量中存储的地方进行交换。每当向量大小增加时,我想实现一些指令

我如何在C++中编写以下模式,以便在if:中执行语句

if ("vVector.size() did not increase")
//*instruction*

注:vVector会不时自动递增。它实际上是另一个载体的克隆,它收集东西并在我没有控制权的情况下扩展

编辑:

当我这样做时:

if (!(vVector.size()++))
//do whatever is here

我得到以下错误:增量操作数所需的左值

vVector由在单独的头文件中声明的函数填充在同一cpp文件的另一个函数中。

下面是一个代码片段,其中有一个简短的描述:http://hastebin.com/amisuvafab.coffee

int init_size = v.size();
...
if(init_size == v.size()) {
  // do whatever is here
}

编辑时:

只有在std::vector中插入元素时,它的大小才会增加。因此,vVector.size()++一开始就没有意义。

出现错误的原因是,执行if(!(vVector.size()++))是非法的。std::vector::size成员函数将返回rvalue,而不是增量后operator++所需的lvalue。现在,关于rvaluelvalue之间的区别,请参阅此链接。

就像这个一样简单

int prevSize = vVector.size();
// do something here
if (vVector.size() == prevSize) {
    // do whatever is here.
}

编辑

if (!(vVector.size()++))

这种说法显然是错误的。size()方法返回向量大小的值(const),而不是引用。所以不能递增。AddInventoryHonest()使用push_back()将其添加到向量中。因此,size()方法的返回值将随着对push_back的每次调用而变化。因此,这将在这种情况下起作用。

编辑2:要处理多线程情况,请使用条件变量(只是一个示例)

int prevSize = vVector.size();
// do something
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
std::condition_variable cv;
bool size_did_not_increase() {
    return vVector.size() == prevSize;
}
cv.wait(lck, size_did_not_increase());
相关文章: