- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我正在尝试为我的 Vector
类实现一个 pop_back()
函数,但我没有得到预期的结果:
这是我当前的功能:
template <typename T>
void Vector<T>::pop_back() {
if(vsize > 0){
array[vsize].~T();
--vsize;
}
}
为什么这不删除数组中的最后一个元素?
这是我的.h
:
template <typename T>
class Vector {
public:
Vector();
~Vector();
void push_back(const T &e);
int size() const;
void pop_back();
void allocate_new();
T operator[](int index);
private:
Vector(const Vector<T> & v);
Vector<T> & operator=(const Vector<T> &);
int vsize;
int capacity;
T* array;
};
最佳答案
调用数组中对象的析构函数除了将数组元素置于一个有趣的状态之外不会对数组做任何事情。特别是,如果做这样的事情:
T* array = new T[2];
array[1].~T();
delete[] array; // ERROR: double destruction
如果不首先恢复被破坏的数组元素,您根本无法真正摆脱数组。
“真实”实现处理这种情况的方式是分配原始内存,例如,使用 void* memory = operator new[](size);
(带有套装 size
)或者,如果它是标准 C++ 库容器,则使用适当的分配器函数。然后容器根据需要在内存中构造和销毁对象。被销毁的内存中的实际表示可能仍然没有真正改变,因为大多数析构函数只是摆脱了所有持有的资源并保留对象中的其他位不变,看起来好像内存中有一个生命对象,尽管它不是。
关于c++ - 自定义 Vector pop_back 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19084284/
来自 C++ Primer 以及 https://en.cppreference.com/w/cpp/container/priority_queue ,我知道: A priority_queue r
我有以下函数来计算两个笛卡尔点之间的距离,以及其中一个点关于 z 轴的镜像。 inline std::vector distances( MyCartesian const & point_i
我有以下创建 Stack 对象的主程序,用 double 填充它,然后弹出它们。代码文件很好,但 pop_back() 部分似乎不起作用,而 s.back() 确实返回了正确的值。这怎么可能? #in
为什么 pop_back() 没有返回值?我用谷歌搜索了一下,发现它可以提高效率。这是在标准中这样做的唯一原因吗? 最佳答案 效率与它几乎没有关系(或者根本没有关系)。 此设计是 an importa
为什么 pop_back() 没有返回值?我用谷歌搜索了一下,发现它可以提高效率。这是在标准中这样做的唯一原因吗? 最佳答案 效率与它几乎没有关系(或者根本没有关系)。 此设计是 an importa
为什么 pop_back() 没有返回值?我对此进行了谷歌搜索,发现它可以提高效率。这是在标准中这样做的唯一原因吗? 最佳答案 效率与它几乎没有关系(或者根本没有关系)。 这个设计是 an impor
我有一个像这样的配对 vector vector > Names; 我是这样放数据的: cin>>taxi>>Ar_taxis>>Ar_mathiton; for(j=0;j
列表.H void List::pop_back() { if (size == 0) cout next != NULL) iterator = it
如果有一个指针指向 vector 的最后一个元素,我想删除该元素但通过指针保留数据,我该怎么做? vector a; a.push_back(1); int * b = a[0]; a.pop_bac
给出下面的代码(假设它被命名为deque.cpp) #include #include int main() { std::deque d = {1, 2, 3}; for (auto i
std::string pop_back() : 移除字符串的最后一个元素 在 C++ 规范中说 C++11 字符串类函数 pop_back 具有常数时间复杂度。 (更准确地说 - 未指定但通常不变)
我在修改字符串时遇到问题。感谢您的协助;谢谢! struct Drawings::menues { std::vector variable; } Menue[numMenues]; Menu
我刚刚开始学习数据结构,并且正在实现某种数组列表(~=std::vector)。我想知道 pop_back() 是如何实现的,以便它具有恒定的复杂性?它必须将大小减少 1 并删除最后一个元素。现在我在
我有以下创建 Stack 对象的主程序,用整数填充它然后弹出它们。代码文件很好,但 pop_back() 部分似乎不起作用,即使在 pop_back() 打印所有值之后也是如此。这怎么可能? #inc
在下面的代码中,我实现了双向链表。我得到的输出为 56 2 3 4 0而不是 56 2 3 4 .但是,如果我删除 lt.erase(5); lt.push_back(46);然后我得到正确的输出。我
我目前正在自学 C++,但在创建析构函数时遇到了一些问题。 这是我正在努力处理的主要部分的代码 #include using namespace std; class Test { priv
这个问题在这里已经有了答案: When could std::priority_queue::pop throw an exception (1 个回答) 关闭 4 年前。 我很惊讶地看到标准 C+
所以我正在尝试为我的 Vector 类实现一个 pop_back() 函数,但我没有得到预期的结果: 这是我当前的功能: template void Vector::pop_back() {
代码: #include #include #include #include struct myClass { bool bIsDead; myClass(bool bDea
我试图理解 vector::pop_back() 的行为。所以我有以下代码片段: vector test; test.push_back(1); test.pop_back(); cout 0 的元
我是一名优秀的程序员,十分优秀!