如何在c++中使用do-while循环迭代地将向量自馈送到函数中?

jpfvwuh4  于 2023-05-23  发布在  其他
关注(0)|答案(3)|浏览(119)

如果我从vector<double> myVec开始,假设有一个函数myFunction
当myVec进入时,返回一个相同长度的向量,但为了说明我需要做什么,
假设我得到vector<double> myVec2 = myFunction(vector<double> myVec)
则得到vector<double> myVec3 = myFunction(vector<double> myVec2)
然后我得到vector<double> myVec4 = myFunction(vector<double> myVec3) ...等等
直到满足第i个myVec上的条件,例如condition(myVec8) == true
我怎么能这样做呢?
到目前为止我试过了

do{
   myVec = myFunction(myVec);
}while( condition(myVec) == true);

但什么都不能打印

fkvaft9z

fkvaft9z1#

也许我错过了一些东西,但这段代码对我来说很好:

std::vector<int> process_vector(std::vector<int> v)
{
    // add one random element to the vector
    v.push_back(hol::random_number(0, 10));
    return v;
}

bool condition(std::vector<int> const& v)
{
    // end when sum of elements is larger than 100
    return std::accumulate(std::begin(v), std::end(v), 0) > 100;
}

int main()
{
    std::vector<int> v;

    // use `std::move` to avoid copying the vector
    while(!condition(v))
        v = process_vector(std::move(v)); // move vector in

    // print the results    
    for(auto i: v)
        std::cout << i << ' ';
    std::cout << '\n';
}

输出:

0 4 1 4 9 8 0 7 6 8 3 4 7 2 3 1 7 3 1 2 4 0 8 6 7
zengzsys

zengzsys2#

Step To Follow在c++中使用do-while循环迭代地将向量自馈送到函数中

1.使用初始值声明并初始化向量。
1.定义一个函数,该函数将向量作为参数并对其执行一些操作。
1.创建一个do-while循环,迭代直到满足某个条件。
1.在循环中,使用向量的当前状态调用函数。
1.根据函数的结果更新向量。
1.检查终止条件以确定是否继续循环。

示例:

#include <iostream>
#include <vector>

void incrementVector(std::vector<int>& vec) {
for (int& element : vec) {
element++;
}
}

int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};

bool continueLoop = true;
do {
    // Call the function with the current state of the vector
    incrementVector(myVector);

    // Print the updated vector
    for (int element : myVector) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    // Update the termination condition based on some criteria
    if (myVector[0] >= 10) {
        continueLoop = false;
    }
} while (continueLoop);

return 0;
}

在本例中,incrementVector函数用于递增向量的每个元素。循环继续,直到向量的第一个元素达到大于或等于10的值。在每次迭代中更新向量,并打印更新后的值。

dauxcl2d

dauxcl2d3#

这样行吗?

while( true ){
    if( condition(myVec) ){
        break;
    }else{
        // do stuff with vector
        myVector = myFunction(myVector);
    }
}

或者...也许你可以用递归来实现....

void handle_vector( vector<double> myVec ){
    if( !condition(myVec) ){
        // do stuff with myVector
        handle_vector( myFunction(myVec) );
    }
}

相关问题