是否允许在set_intersection中重复使用向量?

时间:2015-10-23 20:09:36

标签: c++ vector set-intersection

我很困惑,这就是我做的事情

  1. 名为vec的第一个向量有5个元素
  2. 名为s的第二个向量有3个元素。
  3. 两个元素是他们共同的
  4. 他们结合了,得到了正确的输出。结果存储在vec_out
  5. 问题开始 -
    5.它们的交叉点是否存储在 vec_out 中,没有结果,即没有任何相交的内容 6.将结果更改为要写入全新的矢量 v ,显示正确的结果,即2个元素相交

    所以,我想知道,为什么没有vec_out的重用工作来找出set_intersection(它是set_intersection的第五个参数)?

    任何提示? 这是代码

    vector<int> vec(5);
    vector<int> s(3);
    vector<int> vec_out(10);                                           
    vector<int>::iterator itr;
    
    vec[0]=3;                                                          
    vec[1]=4;
    vec[2]=4;
    vec[3]=14;                                                         
    vec[4]=42;
    
    
    s[0]=14;
    s[1]=42;                                                           
    s[2]=442;
    
    set_union(vec.begin(), vec.end(), s.begin(), s.end(), vec_out.begin());
    cout<<"union\n";                                                   
    for(itr = vec_out.begin(); itr != vec_out.end(); itr++)            
        cout << " " << *itr;                                           
    cout<<endl;                                                        
    
    std::vector<int> v(10); // Using a new vector works fine, and gives result
    // THIS BELOW LINE IS NOT WORKING
    //itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), vec_out.begin());
    itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), v.begin());
    v.resize(itr - v.begin());                                         
    
    cout<<"intersection\n";                                            
    for(itr = v.begin(); itr != v.end(); itr++)                        
        cout << " " << *itr;        
    

    仅供参考:我正在迭代预期的向量,没有显示问题,即当我尝试第5步时,我正在迭代vec_o​​ut。

1 个答案:

答案 0 :(得分:0)

也许是因为您忘记在代码末尾的vec_o​​ut上替换v。这段代码工作正常(14 42):

std::vector<int> v(10); // Using a new vector works fine, and gives result  
// THIS BELOW LINE IS NOT WORKING                                           
itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), vec_out.begin()>);
/* itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), v.begin()); >*/
vec_out.resize(itr - vec_out.begin());                                      

cout<<"intersection\n";                                                     
for(itr = vec_out.begin(); itr != vec_out.end(); itr++)                     
      cout << " " << *itr;