C++ 将std向量重新指定给默认构造函数向量是一种很好的擦除方法吗?
关于清除一个C++ 将std向量重新指定给默认构造函数向量是一种很好的擦除方法吗?,c++,vector,C++,Vector,关于清除一个std::vector有很多问题和答案,我想知道为什么在我读到的所有问题和答案中,没有人只说: existingVector=std::vector() 这不是清除向量的简单方法吗?确实很简单,但有一种更简单、更直接的方法: existingVector.clear(); 你也可以这样做: existingVector.resize(0); 但我喜欢第一种方法,因为它完全按照它所说的做 类似地,我更喜欢检查if(myVec.empty())而不是if(myVec.size()==
std::vector
有很多问题和答案,我想知道为什么在我读到的所有问题和答案中,没有人只说:
existingVector=std::vector()代码>
这不是清除向量的简单方法吗?确实很简单,但有一种更简单、更直接的方法:
existingVector.clear();
你也可以这样做:
existingVector.resize(0);
但我喜欢第一种方法,因为它完全按照它所说的做
类似地,我更喜欢检查if(myVec.empty())
而不是if(myVec.size()==0)
更新:如果您希望“真正重置”,即您不仅希望大小变为0,还希望容量变为0,那么您可以做几件事
缩紧
vec.clear();
vec.shrink_to_fit();
不过,正如注释正确指出的那样,shrink_to_fit也是一个非绑定请求,编译器可能会忽略它
与新构造的向量交换
vector<whatever>().swap(vec);
vector().swap(vec);
这确实很简单,但有一种更简单、更直接的方法:
existingVector.clear();
你也可以这样做:
existingVector.resize(0);
但我喜欢第一种方法,因为它完全按照它所说的做
类似地,我更喜欢检查if(myVec.empty())
而不是if(myVec.size()==0)
更新:如果您希望“真正重置”,即您不仅希望大小变为0,还希望容量变为0,那么您可以做几件事
缩紧
vec.clear();
vec.shrink_to_fit();
不过,正如注释正确指出的那样,shrink_to_fit也是一个非绑定请求,编译器可能会忽略它
与新构造的向量交换
vector<whatever>().swap(vec);
vector().swap(vec);
分配是可以的,但是可以允许优化实现保留原始内存缓冲区,以避免重新分配
强制释放向量的传统智慧是“用临时变量交换”:
#包括
#包括
int main(){
std::载体a(256);
std::vector().swap(a);
std::cout分配是可以的,但是可以允许优化实现保留原始内存缓冲区,以避免重新分配
强制释放向量的传统智慧是“用临时变量交换”:
#包括
#包括
int main(){
std::载体a(256);
std::vector().swap(a);
std::为什么不简单地使用现有的vector.clear()ῥεῖ 请参阅我对其中一个答案的评论。我想这个问题缺少一些关于您真正想要做什么的细节(例如,重置容量)。请将这些细节包括在问题中(我也可以这样做,但我担心会进一步混淆).实际上,作为右值赋值,您的代码更有可能准确地给出您想要的内容…为什么不简单地使用existingVector.clear()
?它甚至更难输入。@πάνταῥεῖ 请参阅我对其中一个答案的评论。我想这个问题缺少一些关于您真正想要做什么的细节(例如,重置容量)。请将这些细节包括在问题中(我也可以这样做,但我担心会进一步混淆)。实际上,你的代码有更好的机会给你想要的东西,作为右值赋值……清除很简单,但不是完全擦除,因为它会留下可用的内存,对吗?@Jerome:可能是这样,实际上也是这样,但这同样适用于你的方法。请参阅我对另一个答案的评论。收缩到适合
是一个“非绑定”要求从可移植性的角度来看,这使得它与std::random_设备一样脆弱和毫无意义:(shorn_to_fit
是不具有约束力的,因为标准不希望对任意大小进行精确拟合。例如,如果向量为7个字符,则如果内存管理器提供的分配大小是8或16个字节,则允许进行收缩。清除很简单,但不是完全擦除,因为它会保留内存y可用,对吗?@Jerome:可能,实际上也是,但你的方法也是如此。请看我对另一个答案的评论。shorn\u to\u fit
是一个“无约束力”的请求。从可移植性的角度看,这使得它与std::random\u device
一样脆弱和毫无意义:(shorn_to_fit
不具有约束力,因为标准不希望对任意大小进行精确拟合。例如,如果向量为7个字符,则如果内存管理器提供了8或16个字节的分配大小,则允许收缩产生8或16个字节的容量。