【C++系列】STL容器——vector类的例题应用(12)

简介: 【C++系列】STL容器——vector类的例题应用(12)

【例1] 只出现一次的数字i(范围for与模等(^=))

  • 给出一段数字(例:223344566)(数字出现均两次,只有一个数字只出现一次),并保存在vector中,找到这个出现一次的数字
  • 核心思路:【^=】相同的数模等后为1,最后结果只剩下这个只出现一次的数字
class Solution 
{
public:
  int singleNumber(vector<int>& nums)
  {
   int value = 0;
   for(auto e : v)
    {
      value ^= e; 
    }
   return value;
  }
};

【例2] 杨辉三角OJ(resize & vector类型的vector)

  • 设计思路图示:
  1. 初始化每一行所有元素都为“1”
  2. 根据杨辉三角特性调整中间元素
// 涉及resize / operator[]
// 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]
class Solution 
{
    public:
     vector<vector<int>> generate(int numRows)//传入的参数表示要求杨辉三角的行数
    {
     vector<vector<int>> vv(numRows);//初始化每一行所有元素都为“1”
     for(int i = 0; i < numRows; ++i)
      {
          vv[i].resize(i+1, 1);
      }
     for(int i = 2; i < numRows; ++i)//根据杨辉三角特性调整中间元素
     {
       for(int j = 1; j < i; ++j)
         {
           vv[i][j] = vv[i-1][j] + vv[i-1][j-1];
         }
     }
    return vv;
    }
};

【例3] 电话号码的数字组合(多路递归)

  • 题目要求输入所示:
  • 解题思路:
  • 首先根据题目要求,我们明白要设置一个string,存储【abc】【def】等等字符串
  • 当我们输入"258时",根据题意,我们要做到如图所示【abc】【jkl】【tuv】三者的全排列
  • 我们发现其中可以用 多路递归 的方式来访问
  • 1.图中 aj先分别访问了t u v,得到ajt,aju,ajv ;
  • 2.随后放回,a访问k,再同(1)步骤,分别访问t u v,得到 akt,aku,akv ,同理…
  • 代码细节:
  1. 我们一开始要设置【字串:digits】【层次:level】【存储 结合后返回的一系列串:combineStr】【给定vector:v】
  2. 我们发现,每一层都要涉及到 多路递归 ,于是我们要根据 层数 进行 for循环 for循环
  3. 我们发现,递归后得到的字串的 元素个数 与 层数 是相同的
  4. 注意点: 要将字符类转换成整型(-“0”),以便于访问对应“电话按键”strA中的字符串
string strA[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
             // 输入的数字组合    当前层次      结合后的新字符串      存储所有的全排列组合
  void Combine(string digits, int level, string combineStr, vector<string&> v)
  {
    if (level == digits.size()) //递归后得到的字串的元素个数与层数是相同的
      {
        v.push_back(combineStr);//当到最后一层的时候,将新字符串尾插进vector中
        return;
    }
  int num = digits[level] - '0';//将字符类转换成整型
  string str = strA[num];//访问对应“电话按键”strA中的字符串
  for (size_t i = 0; i < str.size(); ++i) //每一层都要涉及到多路递归,于是我们要根据层数进行for循环
      {
        Combine(digits, level + 1, combineStr + str[i], v);
      }
}


相关文章
|
21小时前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
18 7
|
18天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
45 4
|
19天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
45 5
|
19天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
29 2
|
25天前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
40 0
|
4天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
14 0
|
2月前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
7天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
129 77
|
15天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
9天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
40 3