【问题标题】:How do I compare two values from two vectors and then update the vector values in C++?如何比较来自两个向量的两个值,然后在 C++ 中更新向量值?
【发布时间】:2013-12-08 15:51:49
【问题描述】:

感谢您对之前代码的帮助,伙计们!我现在正在扩展之前的查询以包含以下代码:我遇到了 for 循环和 if 语句没有输出的问题。我必须比较两个向量中的字符串,并找出一个是否是另一个的子集;如果有一个子集,我必须删除它。 (这两个向量实际上是相同的......这实际上是将向量中的所有元素相互比较)。任何指导将不胜感激!

 //headers: iostream, vector
 //namespace std 
 //main function

//each vector already has content (read from a file) stored in them. Both vectors hold         the same elements.

int c,j; string first_sequence, second_sequence;
vector<string>::iterator ivector1; vector<string>::iterator ivector2;
vector<string> sequence_1; vector<string> sequence_2; vector<string> header;

 //comparison of sequences within each element of vectors

size_t location,x,y,k,s;

k = sequence_1.size(); 
s = sequence_2.size();
for(ivector1 = sequence_1.begin(); ivector1< sequence_1.end(); ivector1++){
 for(ivector2= sequence_2.begin();ivector2<sequence_2.end(); ivector2++){
    *ivector1 = first_sequence; *ivector2 = second_sequence;    

    if(ivect1 != ivect2){
        x = first_sequence.size();
        y = second_sequence.size();

        if(x > y){
            location = first_sequence.find(second_sequence);
                                if (location != -1){
                                    cout << "Deleting the sequence with id: <"     << *ivector2 << endl;
                    sequence_2.erase(ivector2); *ivector2 = "gone";
                                     }  


                }   else if (y > x) {
            location = second_sequence.find(first_sequence);
                                if (location != -1){                             
                    cout << "Deleting the sequence with id: <"<< *ivector1 << endl;
                    sequence_1.erase(ivector1); *ivector1 = "gone";

                                    }   

                         }
    }
 }
}

return 0;
}

【问题讨论】:

  • 在vector&lt;int&gt; 中,它不应该让你写*ilist2 = "gone";。
  • "gone" 实际上是 0。谢谢你的捕捉,Ben!不过,程序仍然没有显示 for 循环后的值。
  • 顺便说一句,preincrement ++ilist1 可以比 postincrement ilist1++ 快(充其量是相等的,取决于优化器的好坏)
  • 是我一个人,还是标题好像和问题没什么关系?
  • @user3079139 这是您的第一个问题,我应该指出,一旦发布了答案,过度更改您的代码是不明智的。下面的 2 个答案现在与您最初问题的原始源代码没有远程关联。此外,您的新向量是空的

标签: c++ vector


【解决方案1】:

您没有得到任何输出,因为 vector1 中的所有元素都不大于您插入到 vector2 中的最小值。因此,您测试的这个if 条件

  if (*ilist1 > *ilist2)

永远不会满足,因此不会运行 cout 语句。我愿意打赌,如果你把它改成

 if (*ilist1 < *ilist2)

您将看到终端/屏幕的输出。 3 总是

【讨论】:

    【解决方案2】:

    在每个循环中,您将迭代器的值分配给字符串 first_sequence 和 second_sequence。您永远不会使用向量本身中的值。

    【讨论】:

      【解决方案3】:

      您只是在测试向量 1 中的值是否大于向量 2 中的值。

      您的代码正在测试:

      1 > 4
      1 > 5
      1 > 6
      2 > 4
      2 > 5
      2 > 6
      3 > 4
      3 > 5
      3 > 6
      

      这些都不是真的,所以什么都没有显示出来。

      【讨论】:

      • 感谢所有输入!我已经更新了我的查询,以解决vector 的问题以及它们的元素比较(向量是相同的......所以可以考虑将单个向量中的所有元素相互比较)。
      • ivect1 和 ivect2 永远不会被初始化,我猜它们也应该是 ivector1 和 ivector2。这需要进一步编辑,以便所有变量都有意义。我还建议对有帮助的投票答案;-)
      • @splrs 说我得有15个声望?不过,我很想投票!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多