【发布时间】:2012-06-09 23:32:02
【问题描述】:
std::vector<int> v1(1000);
std::vector<std::vector<int>> v2(1000);
std::vector<std::vector<int>::const_iterator> v3(1000);
这3个向量的元素是如何初始化的?
关于int,我测试了一下,发现所有元素都变成0了,这是标准吗?我相信原语仍未定义。我创建了一个包含 300000000 个元素的向量,给出非零值,删除它并重新创建它,以避免操作系统内存被清除以确保数据安全。重新创建的向量的元素也是0。
迭代器呢?默认构造函数是否有初始值 (0) 或初始值未定义?当我检查这个时,迭代器指向 0,但这可以是 OS
当我创建一个特殊对象来跟踪构造函数时,我看到对于第一个对象,vector 运行默认构造函数,而对于所有其他对象,它运行复制构造函数。这是标准吗?
有没有办法完全避免元素的初始化?或者我必须创建自己的向量? (天哪,我总是说不是另一个向量实现) 我问是因为我使用并行处理的超大稀疏矩阵,所以我不能使用 push_back(),当然我不想要无用的初始化,稍后我会更改值。
【问题讨论】: