如何通过使用for循环c ++放入另一个向量来组织一个向量

Posted

技术标签:

【中文标题】如何通过使用for循环c ++放入另一个向量来组织一个向量【英文标题】:how to organize one vector by placing into another vector using for loop c++ 【发布时间】:2012-08-21 12:39:52 【问题描述】:

我想知道如何通过将一个向量放入另一个向量来组织它。 (注意:它们是对象的向量)。到目前为止我所拥有的是:

double done;
for ( int i = 0; i < id; i++ )

    done = guy[i].done();
    int smallest = i;
    for( int j = i + 1; j < id; j++ )
        if( done > guy[j].done() )
            
                done = guy[j].done();
                smallest = j;   
            
        
    newGuy.push_back( guy[smallest] );

这不会组织向量的每个部分,有时甚至会将同一个人复制到 newGuy 中。有什么想法吗?

【问题讨论】:

“组织”是什么意思? 可能是“排序”。只需使用std::sort 按照“done()”的顺序放置每个“guy”并将其放置在“newGuy”中 【参考方案1】:

如果您尝试对向量进行排序,您可以为您的对象定义一个自定义的小于比较器,并使用std::sort。

bool myComparison(const MyType& lhs, const MyType& rhs) 
  return lhs.done() < rhs.done();


std::vector<MyType> guy = ....;
std::sort(guy.begin(), guy.end(), myComparison);

如果你想让它全部转到一个新的向量,那么只需复制原始的,然后对副本进行排序:

std::vector<MyType> newGuy = guy;
std::sort(newGuy.begin(), newGuy.end(), myComparison);

【讨论】:

数据类型显然是double,在这种情况下不需要自定义比较器 有效!我对编程和 C++ 还很陌生,但还是谢谢你!【参考方案2】:

因为当您将最小的人放入新数组时,您并没有从旧数组中删除它。考虑值[5,4,3,2,1]

您的算法将在i 的第一个值上找到最小的是j=4 (value 1) 并将1 推入新数组,然后它将为i=2 执行此操作,依此类推,直到您只有[1,1,1,1,1]

这就是你正在做的事情,粗体数字是被循环的数字,第二个数组是输出数组。

通过 1: [5 ,4, 3, 2, 1] [1]

通过 2: [5、4321] [1,1]

第 3 关: [5、4、321] [1,1,1]

第 4 关: [5, 4, 3, 2, 1] [1,1,1,1]

第 5 关: [5, 4, 3, 2, 1] [1,1,1,1,1]

每次将它添加到新向量时,只需从旧向量中删除你刚刚发现的最小的项目。当然,正如其他人指出的那样,实际上只使用 std 的排序算法会更好

【讨论】:

以上是关于如何通过使用for循环c ++放入另一个向量来组织一个向量的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用行和固定数量的列进行 for 循环?

C++ For 循环和数组混淆

如何使用循环将带有来自 googlesearch 的链接的列表附加到另一个列表?

C ++将字符放入cin for while循环会导致循环在其外部执行[重复]

使用Vector时,C ++超出范围

如何在C语言中通过查看行中的一个属性对文件的行进行排序?