vector.resize 与 vector.reserve的区别
1.作用:
resize的作用是:重新调整容器中已经保存的元素个数
reserve的作用是:让容器重新分配指定大小的空间
2.问题:
reserve的作用:我不进行reserve或者我reserve很小的,这样的话,我还能push_back吗?可以,reserve(XXX)小于capacity不会起作用,大于的话,系统会重新分配内存。
#define DEBUG_CPP
#ifdef DEBUG_CPP
std::vector<int> vNum(10, 2);
std::cout << "vNum.capacity():" << vNum.capacity();
vNum.reserve(2);// 太小,小于capacity是不会起作用的
vNum.push_back(20);
vNum.push_back(30);
std::cout << "vNum.size():" << vNum.size()<< std::endl;
for (int i = 0; i < vNum.size(); i++) {
std::cout << vNum[i]<< " ";
}
std::cout << std::endl;
#endif
#undef DEBUG_CPP
resize的作用:假设vector存了10个元素,我resize(8),结果是怎样的?后面2个元素被删除。我还能push_back吗?可以!!!resize只是影响之前的。
#define DEBUG_CPP
#ifdef DEBUG_CPP
std::vector<int> vNum(10, 2);
std::cout << "vNum.capacity():" << vNum.capacity();
vNum.resize(2);
vNum.push_back(20);
vNum.push_back(30);
std::cout << "vNum.size():" << vNum.size()<< std::endl;
for (int i = 0; i < vNum.size(); i++) {
std::cout << vNum[i]<< " ";
}
std::cout << std::endl;
#endif
#undef DEBUG_CPP
2 2 20 30
网友评论