我有一个结构
struct str{
std::vector<double> values;
};
我的程序中有一个for循环,它通过这个向量中的值进行交互,这些代码可以工作:
str s;
for (std::vector<double>::size_type i = 0; i < s.values.size(); i++) {
和
for (size_t i = 0; i < s.values.size(); i++) {
但我知道它应该以某种方式完成,但我有一个错误。如何获得这个尺寸?
for (str::values::size_type i = 0; i < s.values.size(); i++) {
而且我知道我可以使用
for (auto i : str.values)
但我还需要迭代次数,而不仅仅是double
中的vector
值。是否可以使用此解决方案?
答案 0 :(得分:2)
您可以使用decltype
str s;
for (decltype(str::values)::size_type i = 0; i < s.values.size(); ++i)
{}
答案 1 :(得分:2)
问题在于您尝试混合类型声明和变量。
您可能需要某种using
或typedef
[或decltype
,正如另一个答案所说的那样],以避免必须知道values
是什么。
编译:
#include <vector>
struct str{
using Storage = std::vector<double>;
Storage values;
};
int main()
{
str s;
for(str::Storage::size_type i = 0; i < s.values.size(); i++)
{
}
}
就像这样:
#include <vector>
struct str{
typedef std::vector<double>::size_type size_type;
std::vector<double> values;
};
int main()
{
str s;
for(str::size_type i = 0; i < s.values.size(); i++)
{
}
}