如何从 std::vector<> 正确初始化向量
How to properly initialize a vector from std::vector<>
当我编译以下代码(使用 -std=c++11 编译器标志)时,我收到(唯一的)错误消息:“'vec' 不是 class,命名空间或枚举。
#include <vector>
#include <iterator>
int main(){
std::vector<int> vec(10,1);
vec::iterator it;
return 0;
}
因为我没有收到任何其他错误消息,对我来说这意味着某个名为 'vec' 的对象已被初始化,但不是作为向量,而是作为其他不是 [=27= 的对象] 因此不能使用范围运算符。
据我了解,我使用了以下构造函数 (http://en.cppreference.com/w/cpp/container/vector/vector):
vector(size_type count,
const T& value,
const Allocator& alloc = Allocator());
哪里说这个构造函数 "Constructs the container with count copies of elements with value value",所以我希望创建一个包含 10 个“1”副本的向量,但我一定是误解了什么,因此出现了问题。
我的推理哪里出错了,上面代码的错误出在哪里?
你对矢量的初始化没问题。但是为了引用迭代器类型,您需要使用向量的类型而不是对象:
std::vector<int>::iterator it;
作用域运算符用于访问命名空间或class中的元素。 vec 不是 class 而是一个对象。你必须写std::vector<int>::iterator
。您还可以使用 auto 推导变量的类型:auto it = vec.begin()
等于 std::vector<int>::iterator it = vec.begin()
当我编译以下代码(使用 -std=c++11 编译器标志)时,我收到(唯一的)错误消息:“'vec' 不是 class,命名空间或枚举。
#include <vector>
#include <iterator>
int main(){
std::vector<int> vec(10,1);
vec::iterator it;
return 0;
}
因为我没有收到任何其他错误消息,对我来说这意味着某个名为 'vec' 的对象已被初始化,但不是作为向量,而是作为其他不是 [=27= 的对象] 因此不能使用范围运算符。
据我了解,我使用了以下构造函数 (http://en.cppreference.com/w/cpp/container/vector/vector):
vector(size_type count,
const T& value,
const Allocator& alloc = Allocator());
哪里说这个构造函数 "Constructs the container with count copies of elements with value value",所以我希望创建一个包含 10 个“1”副本的向量,但我一定是误解了什么,因此出现了问题。
我的推理哪里出错了,上面代码的错误出在哪里?
你对矢量的初始化没问题。但是为了引用迭代器类型,您需要使用向量的类型而不是对象:
std::vector<int>::iterator it;
作用域运算符用于访问命名空间或class中的元素。 vec 不是 class 而是一个对象。你必须写std::vector<int>::iterator
。您还可以使用 auto 推导变量的类型:auto it = vec.begin()
等于 std::vector<int>::iterator it = vec.begin()