了解C 中的向量初始化
Understanding vector initialization in C++
如果我有一个具有初始化列表的构造函数:
std::vector<int> _list;
Program::Program() : _list(0)
{
}
即使矢量大小大小,这也将所有值初始化为0?
您似乎正在误解您要调用的向量构造函数的论点。_list(0)
将使用类型INT的默认值初始化_list
至Zero的长度为零,该值也恰好为零,但是如果向量不包含任何元素,则无关紧要。它没有将元素 value 明确设置为零。也许您打算让构造函数重复一个指定数量的单个值?如果是这样,则需要将所需的长度作为第一个参数,而值重复其第二个参数。该构造不会影响随后的调整大小以扩展向量,该大小将填充新的向量元素具有默认值(或者如果将一个值指定为vector::resize
的附加参数,则将具有不同的值)。
这是一个基于您的代码来说明的示例,该示例首先用值 10
重复长度为5的vector,然后将矢量调整为长度10。
#include <iostream>
#include <vector>
class Program
{
public:
Program() : _list(0) { }
Program(unsigned long size, int value) : _list(size, value) { }
void ResizeList(unsigned long size)
{
_list.resize(size);
}
void PrintList() const
{
std::cout << "_list = ";
for (const auto& val : _list)
{
std::cout << val << ", ";
}
std::cout << std::endl;
}
private:
std::vector<int> _list;
};
int main()
{
Program p(5, 10);
p.PrintList();
p.ResizeList(10);
p.PrintList();
return 0;
}
输出:
_list = 10, 10, 10, 10, 10,
_list = 10, 10, 10, 10, 10, 0, 0, 0, 0, 0,
如果您查看std::vector
构造函数的文档,您会看到constructor (3)
(您正在使用的 CC_6)在_list
中键入int
。这意味着您本质上什么都不做。
调整向量时,除非您使用resize
函数,否则分配空间的元素将是非初始化的,在这种情况下,元素将被初始化为其默认值或您选择的值。
例如,如果您的向量是空的,并且您进行了_list.resize(10);
,则_list
现在将包含10个默认结构类型的int
元素,该元素应为0
。如果您做了类似_list.resize(10, 5);
之类的事情,则_list
现在将包含10个5
s。
我希望这有助于为您清除一切。如果您有任何后续问题,请随时提出。
相关文章:
- 为什么我在向量初始化时收到此错误?
- 使用向量初始化参数化构造函数的对象数组
- C++向量初始化遗传算法的代理向量
- shared_ptr类的向量的向量初始化问题
- 如何实现使用 gcc-4.4 编译的大向量初始化?
- 使用向量初始化C++中的链表
- C++ 中的向量初始化
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- std::另一个函数中的向量初始化
- 理解向量初始化时出现问题
- 静态常量 std::<char>没有堆的向量初始化?
- 向量初始化在 C++ 类中失败
- 具有从特定范围的随机数初始化特征矩阵或向量初始化特征矩阵或向量的有效方法
- 关于向量初始化的一些问题
- 了解C 中的向量初始化
- 设置::使用数字中的引号进行向量初始化
- VS2010中的向量初始化
- C++:构造函数中的向量初始化
- 如何从向量初始化数组?(如何将指针强制转换为数组?)
- 给我一个向量初始化的提示或(答案)