关于vector中的assign和resize函数

本文详细解析了resize与assign函数的功能及使用方法。resize函数通过调整容器大小并填充新元素值来实现长度变化;assign函数则用于设置容器中所有元素的值,并调整其大小。文章深入探讨了两种函数的不同版本及其在不同情况下的应用。

assign函数需要2个参数,第一个参数指定新的size,第2个指定每个元素都取的value。size()函数返回assign中的第一个参数值。调用该函数一定要指定第2个参数值,调用完后,是全新的size,全新的值。

 

resize函数有2个重载版本,一个只有一个size_type参数,一个除了size_type参数外还有_Ty _val,即“可选”新元素值。

 

先说第一个版本:

 void resize(size_type _Newsize)
  { // determine new length, padding with _Ty() elements as needed
  resize(_Newsize, _Ty());
  }

 

可见它用_Ty()做第2个参数,调用了它的第2个版本。第2个版本的定义如下:

 void resize(size_type _Newsize, _Ty _Val)
  { // determine new length, padding with _Val elements as needed
  if (size() < _Newsize)
   _Insert_n(end(), _Newsize - size(), _Val);
  else if (_Newsize < size())
   erase(begin() + _Newsize, end());
  }

由定义可知,对于第一个版本:

若_Newsize小于oldsize,则剩余元素值不变。

若_Newsize大于oldsize,则新添加的元素值用元素的默认构造参数初始化(特别的,int型的将被初始化为0)。

对于第2个版本:

若_Newsize小于oldsize,则剩余元素值不变。(全部调用erase(begin() + _Newsize, end())擦除掉多余元素)

若_Newsize大于oldsize,则新添加的元素值用提供的第2个参数初始化。

 

不管用哪个版本,[0,min(_Newsize,oldsize))范围内的值均保持不变。

 

 

 

 

 

C++ 的 vector 容器提供了丰富的函数来进行各种操作,以下是一些常见操作的调用方法示例: ### 1. 声明与初始化 ```cpp #include <iostream> #include <vector> int main() { // 声明一个存储 int 类型的 vector std::vector<int> vec; // 声明并初始化 std::vector<int> vec2 = {1, 2, 3, 4, 5}; std::vector<int> vec3(3, 10); // 包含 3 个值为 10 的元素 return 0; } ``` ### 2. 容量大小相关函数 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 获取向量大小 std::cout << "Size: " << vec.size() << std::endl; // 获取向量最大容量 std::cout << "Max size: " << vec.max_size() << std::endl; // 更改向量大小 vec.resize(3); std::cout << "New size after resize: " << vec.size() << std::endl; // 获取向量真实大小 std::cout << "Capacity: " << vec.capacity() << std::endl; // 向量判空 std::cout << "Is empty: " << (vec.empty() ? "Yes" : "No") << std::endl; return 0; } ``` ### 3. 修改元素相关函数 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec; // 末尾添加元素 vec.push_back(10); vec.push_back(20); // 多个元素赋值 std::vector<int> newVec = {30, 40, 50}; vec.assign(newVec.begin(), newVec.end()); // 末尾删除元素 vec.pop_back(); // 任意位置插入元素 vec.insert(vec.begin() + 1, 15); // 任意位置删除元素 vec.erase(vec.begin() + 2); // 交换两个向量的元素 std::vector<int> anotherVec = {100, 200}; vec.swap(anotherVec); // 清空向量元素 vec.clear(); return 0; } ``` ### 4. 迭代器相关函数 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 遍历元素 for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; } ``` ### 5. 元素访问相关函数 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 下标访问 std::cout << "Element at index 1 (using []): " << vec[1] << std::endl; // at 方法访问 std::cout << "Element at index 1 (using at): " << vec.at(1) << std::endl; // 访问第一个元素 std::cout << "First element: " << vec.front() << std::endl; // 访问最后一个元素 std::cout << "Last element: " << vec.back() << std::endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值