根据字符串向量的大小运行循环

时间:2010-04-13 19:06:40

标签: c++ vector

我制作了一个字符串向量

vector<string> actor_;

然后使用push_back在其中添加元素。

我现在想要显示所有这些,我需要根据向量中的元素数运行循环。为此,我需要运行以下循环:

for (int i = 0; i < (int)actor_.size; i++)
{
}

但这会返回以下错误:


error C2440: 'type cast' : cannot convert from 'unsigned int (__thiscall std::vector<_Ty>::* )(void) const' to 'int'
1>        with
1>        [
1>            _Ty=std::string
1>        ]
1>        There is no context in which this conversion is possible

3 个答案:

答案 0 :(得分:8)

size是会员功能;你的意思是:

for (unsigned int i = 0; i < actor_.size(); i++) { }

(使用std::size_t代替unsigned int也是个好主意)

答案 1 :(得分:2)

您可能需要考虑使用迭代器而不是依赖operator []来访问元素(正如您使用积分循环计数器和size()所暗示的那样)。这样,您可以根据需要更改容器类型,而无需修改访问代码。

答案 2 :(得分:1)

大多数正确无误:

for (std::vector<std::string>::size_type i = 0; i < actor_.size(); ++i) {}
那是丑陋的。您可以使用typedef来简化它。

C ++ 0x给我们auto,但这很容易被滥用:

for (auto i = 0; i < actor_.size() ++i) {}  // WRONG

再次,iint(因为0int),这意味着我们还没有解决问题。迭代器加上auto会产生合理的结果:

for (auto it = actor_.begin(); it != actor_.end(); ++it) {}

另一种选择是使用std::for_each和lambda。 STL语法几乎总是优先于索引上的迭代器。

哦,GMan指出C ++ 0x使基于范围的for循环变得更容易:

for (auto& a : actor_) {}