如何"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
。现在关于 rvalue
和 lvalue
之间的区别,请参阅此 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());
我有比特币源代码(多线程),我打算添加一些新行。在比特币网络上,数据消息在数据存储在向量中的地方交换。每当向量大小增加时,我想执行一些 指令 :
如何在 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
。现在关于 rvalue
和 lvalue
之间的区别,请参阅此 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());