【问题标题】:How to properly initialize a vector from std::vector<>如何从 std::vector<> 正确初始化向量
【发布时间】:2017-02-05 10:32:05
【问题描述】:

当我编译以下代码(使用 -std=c++11 编译器标志)时,我收到(唯一的)错误消息:“'vec' is not a class, namespace or enumeration”。

#include <vector>
#include <iterator>

int main(){

std::vector<int> vec(10,1);
vec::iterator it;

return 0;
}

由于我没有收到任何其他错误消息,对我而言,这意味着一些名为“vec”的对象已被初始化,但不是作为向量,而是作为其他不是类且范围运算符可以用于的对象因此不能使用。

据我了解,我使用了以下构造函数(http://en.cppreference.com/w/cpp/container/vector/vector):

vector(size_type count,
       const T& value,
       const Allocator& alloc = Allocator());

它说这个构造函数“使用具有值值的元素的计数副本构造容器”,所以我希望创建一个包含 10 个“1”副本的向量,但我一定误解了一些东西,因此出现了问题。

我的推理哪里出错了,上面代码中的错误又出自哪里?

【问题讨论】:

    标签: c++ vector stdvector


    【解决方案1】:

    您对向量的初始化很好。但是为了引用迭代器类型,你需要使用向量的类型而不是对象:

    std::vector<int>::iterator it;
    

    【讨论】:

      【解决方案2】:

      作用域运算符用于访问命名空间或类中的元素。 vec 不是一个类,而是一个对象。你必须写std::vector&lt;int&gt;::iterator。您还可以使用 auto 推断变量的类型:auto it = vec.begin() 等于 std::vector&lt;int&gt;::iterator it = vec.begin()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-06
        • 2018-10-17
        • 1970-01-01
        • 2016-07-30
        • 2013-09-12
        • 2013-07-13
        • 2012-06-09
        • 1970-01-01
        相关资源
        最近更新 更多