理解向量初始化时出现问题
Problem with understanding a vector initialization
这可能是一个愚蠢的问题,但有些事情我不太明白。使用向量时,每当我想将元素"push_back"到某个位置时,只有以某种方式初始化向量,我才能这样做。
例如,当我使用此初始化时:
std::vector<int> Myvec;
int size = 0;
int x = 0;
std::cin >> size;
for(int i = 0; i < size; i++)
{
std::cin >> x;
Myvec[i].push_back(x);
}
我收到以下错误:请求在 'Myvec.std::vector<_Tp, _Alloc>::operator[] 中的成员 'push_back'>((std::vector::size_type(i((',它是非类类型 '__gnu_cxx::__alloc_traits>::value_type {aka int}'|
但是当我使用以下初始化时,它可以工作:
int size = 0;
int x = 0;
std::cin >> size;
std::vector<int> Myvec[size];
for(int i = 0; i < size; i++)
{
std::cin >> x;
Myvec[i].push_back(x);
}
我使用它没有任何问题,并且可以在各种任务中实现它,但它困扰着我,因为我不确定它为什么实际有效。提前感谢您的帮助。
在第一个块中,您应该使用:
std::vector<int> Myvec;
int size = 0;
int x = 0;
std::cin >> size;
for(int i = 0; i < size; i++)
{
std::cin >> x;
Myvec.push_back(x);
}
或者您可以使用:
int size = 0;
int x = 0;
std::cin >> size;
std::vector<int> Myvec(size);
for(int i = 0; i < size; i++)
{
cin>>Myvec[i];
}
并使用以下命令打印矢量:
for(int i = 0; i < size; i++) {
std::cout<< Myvec[i]<<" ";
}
当你使用向量Myvec[size]初始化它时,它变成了大小为"size"的向量向量,这意味着每个Myvec[i]都是一个可以在其中推送元素的向量。
在此处阅读更多内容: https://www.geeksforgeeks.org/2d-vector-in-cpp-with-user-defined-size/
你对std::vector::push_back
函数的工作原理有误解。它基本上在向量的末尾附加一个新对象。特别是,您不需要使用 std::vector::operator[]
索引到向量中。相反,请将代码段更改为
for(int i = 0; i < size; i++)
{
std::cin >> x;
Myvec.push_back(x);
}
您提出的解决方案做了一些您可能不想要的事情,即使用原始向量数组:将用户输入传输到对象中时,它会创建size
向量,每个向量都有一个元素。
你没有把一个元素放在向量中的位置i
。
您将一个元素放在向量数组中第 i
个向量的后面!更糟糕的是,数组是空的,因此访问无效。
但是,如果不是这样,您最终会得到i
个向量,每个向量都有一个元素。不好!
相反,您可以使矢量具有一定的大小:
MyVec.resize(SomeSize);
然后分配元素,就好像向量是一个数组一样(它有点像(:
MyVec[i] = thing;
这里的关键点是你不必push_back
;只有当你想把一个新元素推到向量的后面时,你才这样做。您可以使用类似数组的[]
语法访问现有值。
在C++书中阅读有关向量的更多信息。
- C++转换参数初始化问题
- 运行时C++数组初始化问题
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- C++初始化具有 int 0 问题的unique_ptr
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- 在构造函数 c++ 中初始化属性时出现问题
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- shared_ptr类的向量的向量初始化问题
- public:静态常量字符串声明/初始化问题
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 true 初始化布尔数组时出现问题
- 为什么C++中的大括号初始化可以解决STL容器的初始化问题
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- C++中构造函数的对象初始化出现问题
- 初始化com对象的问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 理解向量初始化时出现问题