Issue in vector
Issue in vector
class item {
int i;
};
vector<item> ls(3); // line 1
item i1(1); // line 2
ls.push_back(i1); // line 3
- 1号线:
- 默认调用一次
- copy ctr被调用3次
- 第3行:
- copy ctr被调用4次
我的问题是在第3行,最初的3个副本在做什么?
矢量ls (3);
你的期望:
您可能期望item
的默认构造函数被调用3
次,而不是默认构造函数被调用一次,复制构造函数被调用3
次。
实际情况:
它正在创建一个类item
对象,然后将其复制到向量的每个元素。有3
元素,因此3
复制构造函数调用。
原理:
我们不能假设这些元素是如何由std::vector
构造的。标准的只说明必须有一个默认构造函数,并且不强制std::vector
实现在这方面做任何其他特定的事情。
ls.push_back (i1);
实际情况:
vector最初是为3
元素创建的,因此当您推入4th
元素时,必须将第一个3
元素复制到新的位置,以便vector可以容纳新元素并具有连续分配,这解释了3
复制构造函数调用。方法push_back
创建要添加的元素的副本,然后将其添加到vector中,从而导致4th
复制构造函数调用,所有这些导致4
复制构造函数调用。
vector
是一个自动增长的数组。当超出内部数组的当前容量时,将创建一个更大的新数组,并将元素复制到新数组中。
假设vector
容量实际上只保留足够的空间来存储3个元素,当您推送第四个元素时,前3个元素必须复制到新数组中。
相关文章:
- std::move a const std::vector in a lambda capture
- find() stl in vector in c++
- typedef vector size_type in header file
- 如何修复c ++中的错误"vector iterators in range are from different containers"?
- 是否有内置函数返回" the number of true value in a boolean vector "?
- std::sort in vector<int> 返回 0 而不是值
- 在函数调用中使用类型vector<pair<int,int>>::iterator&in
- VS2010: assert "vector iterators incompatible" in std::vector.clear()
- 将数据从 std::vector 复制到 Eigen's MatrixXd in C++
- VC++ vector::p ush_back "Access Violation" in DLL
- lower_bound in C++ minus vector
- 加速C++ istream&read_hw(istream&in, vector<double>&hw)
- sorting std::vector in pathfinding
- Deallocating memory in C++ vector<T>
- std::p riority_queue<int, std::vector<int>, std::更大的<int>> in min_heap函数
- std::vector::erase/remove_if resulting in nullptr
- Serilize List<List> <string>in ProtoBuf-net 和 Deserialize as a C++ vector<vector<s
- cin to vector in C++
- Issue in vector
- std::sort for a 2D vector in c++