0

我正在尝试遍历向量,但我需要它在某个元素处停止,因为我只想计算向量中特定数量的元素

例如,我有一个结构向量(相关性),我需要计算向量中的前 2 个元素(这个数字将取决于用户输入)

for(std::vector<Relevance>::const_iterator it = RelStructs.begin(); it < RelStructs[2]; ++it)
{

 cout << "\nDesc2: " << it->desc2 << "\n";  // desc2 is a variable within the Relevance struct

 cout << "Relevance2: " << it->relevance2 << "\n\n"; // relevance2 is a variable within the Relevance struct

我知道这段代码行不通,但我正在尝试做这样的事情。谢谢

4

4 回答 4

2

很简单,只要加上你想要的号码begin()

for (std::vector<Relevance>::const_iterator it = RelStructs.begin(); 
    it < RelStructs.begin() + 2; ++it)
{
于 2013-09-15T18:47:03.390 回答
1

只需遍历序列v.begin(), v.begin() + std::min<std::size_t>(count, v.size())

for (std::vector<Relevance>::const_iterator it(RelStructs.begin()),
     end(it + std::min<std::size_t>(RelStructs.size(), count);
     it != end; ++it) {
    ...
}
于 2013-09-15T18:47:56.767 回答
1

如果userEnteredNumber是您需要遍历向量的数量,那么以下应该有效:

for (int i = 0; userEnteredNumber < RelStructs.size() && i < userEnteredNumber; i++)
{
    std::vector<RelStructs> v = RelStructs[i];
    // do something with v.
}
于 2013-09-15T18:51:07.483 回答
1

假设你的类有一个合适的operator <<定义,你可以使用std::copy_n()std::ostream_iterator不是滚动你自己的for循环:

size_t number_of_elements = 2;
std::copy_n(std::begin(RelStructs),
    std::min(number_of_elements, RelStructs.size()),
    std::ostream_iterator<Relevance>(std::cout, "\n"));

调用std::min()确保您不会跑完RelStructs,特别是因为number_of_elements来自用户输入。

operator <<可能看起来像这样(并且可以在其他地方使用,我敢肯定):

std::ostream& operator <<(std::ostream& os, Relevance const& rel)
{
    return os << "\nDesc2: " << rel.desc2 << "\n" << "Relevance2: " 
              << rel.relevance2 << "\n\n";
}
于 2013-09-15T19:01:44.717 回答