c++基础知识——STL之vector,字符数组;

简介: c++基础知识——STL之vector,字符数组;

前言


提示:这里可以添加本文要记录的大概内容:


前面我们学习了c++中的相关知识,今天将c++基础知识中的STL讲完,在此之前,先来复习一下数组;

提示:以下是本篇文章正文内容,下面案例可供参考


一、数组的相关应用


1.冒泡排序和选择排序


选择排序


a740d65a66e67eb5e30a784431688430_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码如下(示例):


//按照降序排列
#include<iostream>
using namespace std;
int main(void)
{
  int a[100];
  int n;
  cin >> n;
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  for (int i = 0; i < n - 1; i++)
  {
  for (int j = i + 1; j < n; j++)
  {
    if (a[j] > a[i])
    {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    }
  }
  }
  for (int i = 0; i < n; i++)
  {
  cout << a[i] << " ";
  }
  cout << endl;
}


04ab2ce81c2790d058ae175cd0310d1d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


冒泡排序


冒泡排序就是每两个数据之间进行比较,相对于选择排序,时间复杂度更大.


//按照降序排列
#include<iostream>
using namespace std;
const int N = 100;
int main(void)
{
  int n;
  int a[N];
  cin >> n;
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  for (int i = 0; i < n -1; i++)
  {
  for (int j = 0; j < n - 1 - i; j++)
  {
    if (a[j] < a[j+1])
    {
    int temp = a[j];
    a[j] = a[j+1];
    a[j+1] = temp;
    }
  }
  }
  cout << "冒泡排序的结果为:" << endl;
  for (int i = 0; i < n; i++)
  {
  cout << a[i] << " ";
  }
  cout << endl;
}


6cec17f22ca021080573c7711b5e9eda_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


二分法查询(折半查询)


我们在对数据进行查询时,尤其是涉及到很多的数据的时候,如果利用循环进行查找的时候,会增大时间复杂度,这个时候利用二分法查询就可以提高效率,例如对所有中国人的信息查询,如果利用for()循环进行查询,则最多可能要查询13亿次,而利用二分法则30次就可以查询完毕.


d73e7edbcd508fa9199bec15c6d259f0_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码演示:


//按照降序排列
#include<iostream>
using namespace std;
const int N = 100;
int main(void)
{
  int n;
  int a[N];
  cin >> n;
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  int mid = (n) / 2;
  int m;
  cin >> m;//代表要查找的数;
  for (int i = 0; i<(n/2); i++)
  {
  if (a[mid] == m)
  {
    break;
  }
  else
  {
    if (a[mid] > m)
    {
    mid = (mid + 0) / 2;
    }
    else
    {
    mid = (mid + n - 1) / 2;
    }
  }
  }
  cout << "数据的位置在第:" << mid + 1 << "位";
  cout << endl;
}


5b12a613c670974d23b96fb09abfa331_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


二、STL之vector;


1.vector部分常用成员函数:


78c37c2ffe144de370e2dcb32e8db1ff_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码如下(示例):


vector之一维数组;
#include<iostream>
#include<vector>
using namespace std;
//输出向量中的所有元素
void prtVector(vector<int>a)
{
  for (int i = 0; i < a.size(); i++)
  {
  cout << a[i] << " ";
  }
  cout << endl;
}
int main(void)
{
  int n;
  cin >> n;
  vector<int>a(n);
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  prtVector(a);//调用函数输出动态数组;
  a.begin();
  cout << a.size() << endl;//数组长度;
  a.resize(2 * n, -1);
  prtVector(a);
  a.pop_back();
  prtVector(a);
  a.push_back(3);
  prtVector(a);
  a.insert(a.begin(), 10);//在起始位置插入10;
  prtVector(a);
  a.erase(a.begin() + 3);//删除第三个位置的元素;
  prtVector(a);
  a.clear();//清空数组;
}


29dd8c851f3b8e7376dedcc5c1ebe9ce_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


vector之二维数组;

当题目没有给出二维数组的行数和列数的时候,就可以利用vector来声明动态数组;

第一种方法:


#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
  int a, b;//a行,b列;
  cin >> a >> b;
  vector<vector<int> >tv(a, vector<int>(b));//注意> >之间有空格;
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cin >> tv[i][j];
  }
  }
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cout << tv[i][j] << " ";
  }
  cout << endl;
  }
}



第二种方法:


#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
  int a, b;
  cin >> a >> b;
  vector<vector<int>>tv;//定义一个动态二维数组;
  tv.resize(a);//重置二维数组的行数;
  for (int i = 0; i < a; i++)
  {
  tv[i].resize(b);//重置二维数组列数,其实也可以定义不同的列数;
  }
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cin >> tv[i][j];
  }
  }
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cout << tv[i][j] << " ";
  }
  cout << endl;
  }
}


一、字符串和字符数组的相关应用


1.字符串

字符串常量是以双引号引用的字符序列,字符串结束符时’\0’,所以字符串实际占用内存字节数比它的长度多一.


1.字符数组

一维字符数组:

定义:char a[10]

二维字符数组:

定义:char a[10][13]

字符数组的初始化:char a[ ]={‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’};

字符数组的重点在字符数组函数的应用:


4c3164f68f109d17c9082ba3fdbde990_e615066342a04710b7c3f5ab556d6adb.png


代码如下(示例):


#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int N = 80;
int main(void)
{
  char s[N], t[N];
  scanf("%s%s", s, t);
  printf("%s", s);
  cout << s << "    " << t << endl;
  cout << strlen(s) << "  " << strlen(t) << endl;
  strcpy(s, "hello word!");
  cout << s << endl;
  strcpy(t, "i like c++");
  cout << t << endl;
  strcat(s, t);//连接两个字符串;
  cout << s << endl;
  string str = s;
  cout << str;
  printf("%s", str.c_str());//成员函数c_str将string型数据转换为char型数据;
  return 0;
}


8a40a137a635bd6b18f72d16ec220561_a97df0c7de2f4f7797df3eef24775858.png



总结


本节讲了STL中的一些基础知识,下一节我们讲指针,熟练地掌握STL中的一些库函数,有助于帮助我们做题.

相关文章
|
18小时前
|
存储 编译器 C++
C++:STL - string
C++:STL - string
7 1
|
3天前
|
存储 算法 C++
C++ STL精通之旅:向量、集合与映射等容器详解
C++ STL精通之旅:向量、集合与映射等容器详解
62 0
|
5天前
|
存储 前端开发 C++
【C++入门到精通】C++入门 —— 容器适配器、stack和queue(STL)
在C++中​​std::stack​​​是一个模板类,它是基于容器的适配器,用于实现堆栈数据结构。堆栈是一种后进先出(LIFO)的数据结构,类似于现实生活中的一叠盘子。
16 4
|
15天前
|
存储 定位技术 C++
C++ STL容器与常用库函数
C++ STL容器与常用库函数
58 0
C++ STL容器与常用库函数
|
15天前
|
机器学习/深度学习 C++
C/C++基础知识——数组、循环
C/C++基础知识——数组、循环
30 0
C/C++基础知识——数组、循环
|
15天前
|
存储 算法 C++
c++数组详细介绍(二)
c++数组详细介绍(二)
59 0
|
15天前
|
存储 程序员 C++
c++数组详细介绍(一)
前言 深入理解C++的数组和字符串是成为熟练C++程序员的重要一步。本文将探索C++中数组和字符串的基本概念,从基础到进阶,包括数组的声明、初始化、访问和多维数组的操作,以及字符串类的使用和与字符数组的转换。还将涉及异常处理、动态内存分配、STL中的其他容器、常用字符串操作。
46 0
|
15天前
|
存储 算法 C++
c++ vector数组详细介绍(三)
c++ vector数组详细介绍(三)
44 0
|
15天前
|
存储 算法 C++
c++ vector数组详细介绍(二)
c++ vector数组详细介绍(二)
125 0
|
15天前
|
存储 安全 算法
c++ vector数组详细介绍(一)
c++ vector数组详细介绍(一)
83 0

相关产品

  • 云迁移中心