【C++】STL 容器 - vector 动态数组容器 ⑧ ( vector 容器添加 / 删除元素

分类: 365网址经常打不开 时间: 2025-11-10 08:19:13 作者: admin 阅读: 4368
【C++】STL 容器 - vector 动态数组容器 ⑧ ( vector 容器添加 / 删除元素

文章目录一、 vector 删除元素1、vector 容器尾部 删除 元素 - pop_back 函数2、删除 vector 容器所有元素 - clear 函数3、删除 vector 容器指定 位置 元素 - erase 函数4、删除 vector 容器指定 范围 元素 - erase 函数5、代码示例 - 删除 vector 容器中的偶数元素二、 vector 插入元素1、vector 容器尾部 插入 元素 - push_back 函数2、vector 容器 指定位置 插入 一个元素 - insert 函数3、vector 容器 指定位置 插入 若干相同元素 - insert 函数4、vector 容器 指定位置 插入 其它 vector 容器指定范围的元素 - insert 函数一、 vector 删除元素1、vector 容器尾部 删除 元素 - pop_back 函数参考 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作 | vector 容器容量判定 | vector 容器重新指定容器大小 | 容器尾部插入/删除元素 ) 二、 vector 容器尾部插入 / 删除元素 博客章节 ,

调用 push_back 函数 , 可以在 vector 容器尾部插入元素 ; 在下面的函数原型中 , 将 val 添加到 vector 容器的末尾 ;代码语言:javascript复制void push_back(const value_type& val); 调用 pop_back 函数 , 可以在 vector 容器尾部删除元素 ; 在下面的函数原型中 , 该函数用于删除 vector 容器中的最后一个元素代码语言:javascript复制void pop_back();2、删除 vector 容器所有元素 - clear 函数clear 函数 是 std::vector 容器的一个成员函数 , 用于移除容器中的所有元素 , 并释放元素占用的内存 ;

std::vector#clear() 函数原型如下 :

代码语言:javascript复制void clear() noexcept;该函数没有 参数 和 返回值 , 当调用 clear 函数时 , 会删除 std::vector 容器中的所有元素 , 并使容器的 size 成员变量变为 0 ;

特别注意 : clear 函数 不会改变容器的 capacity 容量 ;

std::vector 调用 capacity() 函数 , 可以获取容量 , 容量是指容器在内存中分配的空间大小 , 可以容纳的元素数量 ; 当容器中的元素数量超过容量时 , 容器会自动进行扩容 , 分配更多的内存空间来容纳更多的元素 ;

代码示例 : 在下面的函数中 , 调用 vector 容器的 clear 函数 , 清空了容器中的元素 , 容器大小变为 0 , 容器的容量仍然为 3 ;

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3 };

// 打印 vector 容器中的元素

printV(vec);

// 清空容器中的元素

vec.clear();

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

vector 容器中的元素 : 1 2 3

vector 容器大小 : 3 ; 容器容量 : 3

vector 容器中的元素 :

vector 容器大小 : 0 ; 容器容量 : 3

Press any key to continue . . .

3、删除 vector 容器指定 位置 元素 - erase 函数iterator 迭代器类 的 erase 函数 删除 指定 索引位置 的元素 ;

iterator#erase() 函数原型如下 :

代码语言:javascript复制iterator erase( const_iterator pos ); 该 erase() 函数 接受一个指向要删除的元素的常量迭代器作为参数 , 返回一个指向被删除元素之后元素的迭代器 ;

注意 : 返回的是 新的迭代器 , 需要重新使用变量接收该迭代器 , 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ;

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3 };

// 打印 vector 容器中的元素

printV(vec);

// 删除容器中第一个元素

vec.erase(vec.begin());

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

vector 容器中的元素 : 1 2 3

vector 容器大小 : 3 ; 容器容量 : 3

vector 容器中的元素 : 2 3

vector 容器大小 : 2 ; 容器容量 : 3

Press any key to continue . . .

4、删除 vector 容器指定 范围 元素 - erase 函数iterator 迭代器类 的 erase 函数 删除 指定 范围区间 的元素 ;

注意 : 迭代器 范围是一个 前闭后开 区间 , 下面的代码 只能删除 2 个元素 , 即 第一个和第二个元素 ;

代码语言:javascript复制 // 删除容器中第一个和第二个元素

vec.erase(vec.begin(), vec.begin() + 2);iterator#erase() 函数原型如下 :

代码语言:javascript复制iterator erase( const_iterator first, const_iterator last );iterator#erase() 函数 接受两个指向要删除的元素的常量迭代器作为参数 , 返回一个指向被删除元素范围的结束位置之后的迭代器 ;

注意 : 返回的是 新的迭代器 , 需要重新使用变量接收该迭代器 , 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ;

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3 };

// 打印 vector 容器中的元素

printV(vec);

// 删除容器中第一个和第二个元素

vec.erase(vec.begin(), vec.begin() + 2);

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

代码语言:javascript复制vector 容器中的元素 : 1 2 3

vector 容器大小 : 3 ; 容器容量 : 3

vector 容器中的元素 : 3

vector 容器大小 : 1 ; 容器容量 : 3

Press any key to continue . . .5、代码示例 - 删除 vector 容器中的偶数元素在下面的代码示例中 , 特别注意 , 元素删除后 返回的是 指向下一个元素位置的 新迭代器 , 新迭代器 需要 设置给 循环控制变量 ,

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 打印 vector 容器中的元素

printV(vec);

// 删除容器中第一个和第二个元素

// 此处 for 循环条件中, 不写 it++ , it++ 只能在特定条件下使用

for (vector::iterator it = vec.begin(); it != vec.end();)

{

if (*it % 2 == 0)

{

// 元素删除后 返回的是 指向下一个元素位置的 新迭代器

// 这里需要将 新迭代器 设置给循环条件变量

it = vec.erase(it);

}

else

{

// 迭代器指向的元素不删除, 则继续向后循环遍历

++it;

}

}

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

代码语言:javascript复制vector 容器中的元素 : 1 2 3 4 5 6 7 8 9 10

vector 容器大小 : 10 ; 容器容量 : 10

vector 容器中的元素 : 1 3 5 7 9

vector 容器大小 : 5 ; 容器容量 : 10

Press any key to continue . . .使用 while 循环实现上述效果 :

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 打印 vector 容器中的元素

printV(vec);

// 删除容器中偶数元素

// 循环控制变量

vector::iterator it = vec.begin();

// 判定循环条件 : 循环到末尾迭代器

while (it != vec.end())

{

if (*it % 2 == 0)

{

// 元素删除后 返回的是 指向下一个元素位置的 新迭代器

// 这里需要将 新迭代器 设置给循环条件变量

it = vec.erase(it);

}

else

{

// 迭代器指向的元素不删除, 则继续向后循环遍历

++it;

}

}

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

代码语言:javascript复制vector 容器中的元素 : 1 2 3 4 5 6 7 8 9 10

vector 容器大小 : 10 ; 容器容量 : 10

vector 容器中的元素 : 1 3 5 7 9

vector 容器大小 : 5 ; 容器容量 : 10

Press any key to continue . . .二、 vector 插入元素1、vector 容器尾部 插入 元素 - push_back 函数参考 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作 | vector 容器容量判定 | vector 容器重新指定容器大小 | 容器尾部插入/删除元素 ) 二、 vector 容器尾部插入 / 删除元素 博客章节 ,

调用 push_back 函数 , 可以在 vector 容器尾部插入元素 ; 在下面的函数原型中 , 将 val 添加到 vector 容器的末尾 ;代码语言:javascript复制void push_back(const value_type& val); 调用 pop_back 函数 , 可以在 vector 容器尾部删除元素 ; 在下面的函数原型中 , 该函数用于删除 vector 容器中的最后一个元素代码语言:javascript复制void pop_back();2、vector 容器 指定位置 插入 一个元素 - insert 函数调用 insert 函数 , 向 vector 容器 指定位置 插入 一个元素 , 该函数 接受一个指向插入位置的常量迭代器和一个要插入的元素作为参数 , 返回一个指向插入位置之后元素的迭代器 ;

函数原型如下 :

代码语言:javascript复制iterator insert( const_iterator pos, const value_type& value ); 注意 : 返回的是 新的迭代器 , 需要重新使用变量接收该迭代器 , 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ;

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3, 4, 5 };

// 打印 vector 容器中的元素

printV(vec);

// 获取首元素迭代器

std::vector::iterator it = vec.begin();

// 向 2 索引位置插入 888 元素

vec.insert(it + 2, 888);

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

代码语言:javascript复制vector 容器中的元素 : 1 2 3 4 5

vector 容器大小 : 5 ; 容器容量 : 5

vector 容器中的元素 : 1 2 888 3 4 5

vector 容器大小 : 6 ; 容器容量 : 7

Press any key to continue . . .3、vector 容器 指定位置 插入 若干相同元素 - insert 函数调用 insert 函数 , 向 vector 容器 指定位置 插入 若干相同元素 , 该函数 接受一个指向插入位置的常量迭代器和一个要插入的元素作为参数 , 返回一个指向插入位置之后元素的迭代器 ;

函数原型如下 :

代码语言:javascript复制iterator insert( const_iterator pos, size_type n, const value_type& value );注意 : 返回的是 新的迭代器 , 需要重新使用变量接收该迭代器 , 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ;

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3, 4, 5 };

// 打印 vector 容器中的元素

printV(vec);

// 获取首元素迭代器

std::vector::iterator it = vec.begin();

// 向 2 索引位置插入 3 个 888 元素

vec.insert(it + 2, 3, 888);

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

代码语言:javascript复制vector 容器中的元素 : 1 2 3 4 5

vector 容器大小 : 5 ; 容器容量 : 5

vector 容器中的元素 : 1 2 888 888 888 3 4 5

vector 容器大小 : 8 ; 容器容量 : 8

Press any key to continue . . .4、vector 容器 指定位置 插入 其它 vector 容器指定范围的元素 - insert 函数调用 insert 函数 , 向 vector 容器 指定位置 插入 其它 vector 容器指定范围的元素 , 该函数 接受一个指向插入位置的常量迭代器和一个要插入的元素作为参数 , 返回一个指向插入位置之后元素的迭代器 ;

函数原型如下 :

代码语言:javascript复制template< class InputIt >

iterator insert( const_iterator pos, InputIt first, InputIt last );注意 : 返回的是 新的迭代器 , 需要重新使用变量接收该迭代器 , 之前的 迭代器 指向的仍然是被删除的元素 , 如果使用之前的迭代器获取数据 , 程序会崩溃 ;

代码示例 :

代码语言:javascript复制#include "iostream"

using namespace std;

#include "vector"

// 打印 vector 类型的 STL 容器

void printV(vector& v)

{

cout << "vector 容器中的元素 : ";

for (int i = 0; i < v.size(); i++)

{

// 输出单个元素

cout << v[i] << " ";

}

// 输出回车换行

std::cout << std::endl;

cout << " vector 容器大小 : " << v.size() << " ; 容器容量 : " << v.capacity();

// 输出回车换行

std::cout << std::endl;

}

int main() {

// 创建空的 vector 容器

std::vector vec{ 1, 2, 3, 4, 5 };

std::vector vec2{ 6, 7, 8, 9, 10 };

// 打印 vector 容器中的元素

printV(vec);

// 获取首元素迭代器

std::vector::iterator it_begin = vec2.begin();

std::vector::iterator it_end = vec2.end();

std::vector::iterator it_pos = vec.begin();

// 向 vec 容器的 2 索引位置插入 另一个 vector 容器 vec2 指定范围区间 元素

vec.insert(it_pos, it_begin, it_end);

// 打印 vector 容器中的元素

printV(vec);

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

代码语言:javascript复制vector 容器中的元素 : 1 2 3 4 5

vector 容器大小 : 5 ; 容器容量 : 5

vector 容器中的元素 : 6 7 8 9 10 1 2 3 4 5

vector 容器大小 : 10 ; 容器容量 : 10

Press any key to continue . . .

相关推荐