通过向量迭代到向量中的特定元素

时间:2013-09-15 18:45:23

标签: c++

我正在尝试迭代一个向量,但是我需要它来停止某个元素,因为我只想在向量中cout一个特定数量的元素

例如,我有一个结构向量(Relevance),我需要cout向量中的前两个元素(这个数字将取决于用户输入)

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 个答案:

答案 0 :(得分:2)

简单,只需添加您想要的号码begin()

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

答案 1 :(得分: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) {
    ...
}

答案 2 :(得分:1)

如果userEnteredNumber是您需要迭代向量的数字,那么以下内容应该有效:

for (int i = 0; userEnteredNumber < RelStructs.size() && i < userEnteredNumber; i++)
{
    std::vector<RelStructs> v = RelStructs[i];
    // do something with v.
}

答案 3 :(得分: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";
}