【问题标题】:c++ : cycle formation using two vectorsc++:使用两个向量形成循环
【发布时间】:2014-10-31 15:27:31
【问题描述】:
0000 0000 0001 1000 0010 0001 0011 1100 0100 0010 0101 0101 0110 1001 0111 1110 1000 0100 1001 0110 1010 1010 1011 0111 1100 0011 1101 1011 1110 1101 1111 1111

我有两个 std::vector<std::bitset<4> > 类型的向量 a 和 b

vector a --> 1st column vector b --> 2nd column

我想用这两个向量形成循环

a[0] == b[0] == 0000 --> 不需要形成循环 a[1] != b[1] --> 可以形成循环。 循环 'c' 形成如下: c = {a[1]==0001,b[1]==1000,... 然后在`vector a`中搜索b[1] =1000,并在b中那个位置加上对应的值 就像现在 b[1] =1000 在 a[8] 处,因此 b[8] = 0100 被添加到循环 c = {a[1]=0001,b[1]=1000,b[8]=0100 ,...} 现在 b[8] = 0100 位于 a[4],因此 b[4] = 0010 被添加到循环 c= {a[1]=0001,b[1]=1000,b[8]=0100, b[4]​​=0010,..} 现在 b[4] =0010 位于 a[2],因此 b[2] == 0001 但 b[2] = 0001 == 循环“c”中的第一个元素,因此离开它,这样就完成了循环。

下面的代码是我创建一个向量 v1 以形成循环 'c' ,将值压入其中,执行操作并返回向量或循环 c。

x=a.at(i), y=b.at(i)

示例:x=a.at(1),y=b.at(1)

std::vector<std::bitset<4> > getvector(int x, int y,const std::vector<std::bitset<4> >& a,const std::vector<std::bitset<4> >& b ) {
std::vector<std::bitset<4>> resultvector;
    resultvector.push_back(x);//push a.at(1) into r 
    resultvector.push_back(y);//push b.at(1) into r 
    while(resultvector.back()!=resultvector.front()) //run the loop until last element in vector r != first element in r and comes out when == 
    {

        //loop begin
        int pos = find(a,y);
        r.push_back(b.at(pos));
        //loop end 
    }
    return resultvector;
}

我想知道如何编写这个循环来执行上述操作。

【问题讨论】:

  • 谁能帮我写这个循环
  • 我已经举了一个例子来解释。现在就清楚了
  • 也许你应该从解释原始问题开始,然后解释你的向量解决方案
  • 使用两个向量形成循环是我的问题
  • 谁能帮我写个循环来形成这个循环

标签: c++ loops c++11 vector


【解决方案1】:

r 一开始是空的,因此可能不会调用 front/back。你的代码和解释毫无意义。

尝试解释你想在没有代码的情况下做什么,然后考虑循环和不变量。

另外,给你的函数一个合适的名字。 getVector 太笼统了,不代表你的意图。结果向量是输入的函数,名称必须以哪种方式指示。这样我们才能更好地帮助您。

【讨论】:

  • 我希望我的向量 v1,v2 示例能帮助您理解我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2020-10-20
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多