如何"do, if expression increased"?

How to "do, if expression increased"?

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

如何在 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
}

编辑时:

A std::vector 的大小只有在您向其中插入元素时才会增加。因此,vVector.size()++ 首先是没有意义的。

您收到错误的原因是 if(!(vVector.size()++)) 是非法的。 std::vector::size 成员函数将 return 一个 rvalue 而不是 post 增量 operator++ 需要的 lvalue。现在关于 rvaluelvalue 之间的区别,请参阅此 link

就这么简单

int prevSize = vVector.size();
// do something here

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

编辑

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

这种说法是完全错误的。 size() 方法 returns 向量大小的值(常量),而不是引用。所以你不能增加它。 AddInventoryHonest() 使用 push_back() 添加到向量中。因此,size() 方法的 return 值将随着每次调用 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());