c vector resize
时间: 2023-08-19 09:06:09 浏览: 63
vector resize 和 reserve 是 STL 中 vector 的两个常用函数。
resize 函数是用来改变 vector 的大小的,如果新的大小大于原来的大小,那么会在 vector 后面增加一些元素,而这些新增的元素的值是未定义的。
reserve 函数是用来预留 vector 的容量的,如果 reserve 的参数大于 vector 的当前容量,那么 vector 的容量会增加到参数值,但是 vector 的大小并不会发生改变。
两个函数有什么区别? resize 会改变 vector 的大小,而 reserve 只是预留容量,不改变 vector 的大小。
相关问题
c++ vector.resize
C++的vector类提供了多种重载的resize()函数来改变向量的大小。根据引用,resize()函数有两种版本:
1. `void resize(size_type n)`:此版本将向量的大小改变为n。如果n小于当前向量的大小,则会截断超出n的元素。如果n大于当前向量的大小,则会在末尾插入默认构造的元素。这种版本不会为新元素赋值。
2. `void resize(size_type n, const value_type& val)`:此版本将向量的大小改变为n。如果n小于当前向量的大小,则会截断超出n的元素。如果n大于当前向量的大小,则会在末尾插入val值的元素。这种版本会为新元素赋值为val。
根据引用,还有另一种版本:
3. `void resize(size_type n, value_type val = value_type())`:此版本与第二种版本相同,但是在没有提供val参数时,默认使用元素类型的默认构造函数来为新元素赋值。
所以,c vector.resize(n)将改变向量的大小为n,不会为新元素赋值;c vector.resize(n, val)将改变向量的大小为n,并将新元素赋值为val;c vector.resize(n, val)将改变向量的大小为n,并将新元素赋值为val(如果未提供val,则使用元素类型的默认构造函数来赋值)。
c++ qt vectorc溢出
为了避免C++/Qt中的vector溢出,可以采取以下措施:
1.使用at()函数而不是[]运算符来访问vector元素,因为at()函数会检查索引是否越界,如果越界则会抛出out_of_range异常。
```c++
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3};
try {
int val = vec.at(3); // 访问越界元素,抛出out_of_range异常
} catch (const out_of_range& e) {
cerr << "Out of range error: " << e.what() << endl;
}
return 0;
}
```
2.使用resize()函数来调整vector的大小,以确保不会越界。
```c++
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3};
vec.resize(5); // 调整vector大小为5
vec[4] = 4; // 正确访问vector元素
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
return 0;
}
```
3.使用迭代器来访问vector元素,因为迭代器会自动检查是否越界。
```c++
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3};
for (auto it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
cout << endl;
return 0;
}
```