我正在尝试迭代一个向量,但是我需要它来停止某个元素,因为我只想在向量中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
我知道这段代码不起作用,但我正在尝试做这样的事情。感谢
答案 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";
}