C++:问题向量 STL
Posted
技术标签:
【中文标题】C++:问题向量 STL【英文标题】:C++:questions vector STL 【发布时间】:2016-02-11 06:24:33 【问题描述】:我确实通过调用名为 getDivisors
的函数来获得除数,并返回由容器 vector<int>
格式化的值。
由于我是 C++
容器的新手,我尝试使用迭代器通过 for 循环打印除数整数。但是,在我看来,这似乎太复杂了。
有什么简单的方法可以在向量STL
中显示存储的整数吗?
我不明白为什么迭代器变量it is pointer type? Could you explain it more about it? I was confused that the compilers show the error message when I did
itnot
it`
以下是我的简单代码。
#include <iostream>
#include <vector>
using namespace std;
vector<int> getDivisors(int input)
vector<int> divisors;
divisors.push_back(1); //default
for (int i = 2; i < input; i++)
if (input%i == 0)
divisors.push_back(i);
return divisors;
void solve()
int input;
cin >> input;
vector<int> divisors = getDivisors(input);
for (vector<int>::iterator it = divisors.begin(); it != divisors.end(); ++it)
cout << *it << endl;
int main(void)
int num;
cin >> num;
for (int i = 0; i < num; i++)
solve();
return 0;
【问题讨论】:
【参考方案1】:您没有提到您使用的是哪个编译器,但在符合 C++11 的编译器中,您可以使用 auto 和 Ranged-based for loop
for (auto i : divisors)
cout << i << endl;
i
这里不是迭代器,它是容器模板类型,在您的情况下是int
指针是一种iterator,特别是random access iterator。迭代器被设计为带有*
、->
、++
、--
等运算符的指针抽象,用于访问containers。
对于 C++ 程序员,cplusplus.com 是您的朋友。
【讨论】:
感谢您的回复。如何在 Visual Studio 中知道我的 C++ 编译器是 C++11 或更低版本? Visual Studio 2013 及以上版本提供 C++11 支持 “范围”是 Visual Studio 2012 中添加的 C++ 11 功能。 或者你也可以看到使用“std::for_each”【参考方案2】:它不是一个指针,它是一个迭代器。它覆盖operator *
以提供类似指针的行为。您可以阅读有关 C++ STL 的更多信息以了解这一点。
如果您使用的是 C++11 或更高版本,请使用:
for (auto x : divisors) cout << x << endl;
【讨论】:
【参考方案3】:迭代器是方便的抽象,有助于访问容器。它们不是指针。
您必须注意的一件事是,如果与其关联的容器发生重大变化,迭代器可能会失效
获取一本关于 STL 的好书,并在继续之前掌握基础知识。这是一个入门书,但它只能做这么多。http://www.cprogramming.com/tutorial/stl/iterators.html
【讨论】:
以上是关于C++:问题向量 STL的主要内容,如果未能解决你的问题,请参考以下文章