C++ 如何“做,如果表达增加”?

C++ 如何“做,如果表达增加”?,c++,multithreading,if-statement,vector,bitcoin,C++,Multithreading,If Statement,Vector,Bitcoin,我有比特币源代码多线程,我打算添加一些新的行。在比特币网络上,数据信息在向量中存储的地方交换。我想在向量增大时执行一些指令: >如何在C++中对以下模式进行编码,以便在内部执行语句: if ("vVector.size() did not increase") //*instruction* ? 注:vVector会不时自动递增。它实际上是另一个载体的克隆,它收集东西并扩展,而我不需要也不愿意控制它 编辑: 当我这样做时: if (!(vVector.size()++)) //do what

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

<> >如何在C++中对以下模式进行编码,以便在内部执行语句:
if ("vVector.size() did not increase")
//*instruction*
?

注:vVector会不时自动递增。它实际上是另一个载体的克隆,它收集东西并扩展,而我不需要也不愿意控制它

编辑: 当我这样做时:

if (!(vVector.size()++))
//do whatever is here
我发现以下错误: 作为增量操作数所需的左值

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

下面是一段代码片段,其中有一个简短的描述:

编辑时:

只有在向std::vector中插入元素时,它的大小才会增加。因此,vVector.size++首先毫无意义

出现错误的原因是,如果!vVector.size++是非法的。std::vector::size成员函数将返回一个右值,而不是后增量运算符++所需的左值。现在,关于右值和左值之间的区别,请看这个

编辑时:

只有在向std::vector中插入元素时,它的大小才会增加。因此,vVector.size++首先毫无意义

出现错误的原因是,如果!vVector.size++是非法的。std::vector::size成员函数将返回一个右值,而不是后增量运算符++所需的左值。现在,关于右值和左值之间的区别,请看这个。

就这么简单

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

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

这种说法显然是错误的。size方法返回向量大小的值const,而不是引用。所以你不能增加它。AddInVentory诚实使用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());
就这么简单

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

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

这种说法显然是错误的。size方法返回向量大小的值const,而不是引用。所以你不能增加它。AddInVentory诚实使用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());


应该是v。size@101010:谢谢。你的答案还有其他选择吗?@AliakbarAhmadi如果你想检查你的向量是否包含任何元素,只要!Vvector。empty@101010好的,我知道这一点,但是带着什里瓦尔德汉的暗示,我编辑了我的问题,并注意到代码是多线程的。size@101010:谢谢。你的答案还有其他选择吗?@AliakbarAhmadi如果你想检查你的向量是否包含任何元素,只要!Vvector。empty@101010好的,我知道这一点,但是带着什里瓦尔德汉的暗示,我用一条关于代码是多线程的注释编辑了我的问题。谢谢!但不幸的是,您的答案不起作用,因为vVector.size会不时调整,if表达式将始终为真,对吗?@AliakbarAhmadi您可以在不起作用的地方显示一个代码片段吗?这是一个不起作用的短片段:@AliakbarAhmadi我假设您的代码不是多线程的,因此,如果在注释处的if条件之前不向向量插入任何内容,那么大小将如何更改?实际上,我的代码是多线程的。这是比特币的源代码。我将用多线程注释编辑我的问题。谢谢!但不幸的是,您的答案不起作用,因为vVector.size会不时调整,if表达式将始终为真,对吗?@AliakbarAhmadi您可以在不起作用的地方显示一个代码片段吗?这是一个不起作用的短片段:@AliakbarAhmadi我假设您的代码不是多线程的,因此,如果在注释处的if条件之前不向向量插入任何内容,那么大小将如何更改?实际上,我的代码是多线程的。这是比特币的源代码。我将用多线程注释编辑我的问题。你的代码和问题太荒谬了。@JonathanPotter你有更好的主意如何在短时间内解决我的问题吗?你还没有说你的问题是什么。你所做的只是张贴一些代码,这些代码不可能编译,更不用说做任何实际的事情了。J.ONANTHOBTER我怎么把这个放在C++语法上:如果向量大小增加{//做某事}?这仍然毫无意义。你的代码和问题都很可笑。@JonathanPotter你有更好的主意如何在短时间内解决我的问题吗?你还没有说你的问题是什么。你所做的一切就是发布一些不可能编译的代码,更不用说做任何实际的事情了。@JonathanPotter我怎么能这样说呢
在C++语法方面:如果向量大小增加{//do-}},它仍然没有意义。