机器人CPP编程基础-03变量类型Variables Types

news2024/11/24 12:30:22

机器人CPP编程基础-02变量Variables


全文AI生成。


C++

#include<iostream>

using namespace std;

main()
{
    int a=10,b=35; // 4 bytes
    cout<<"Value of a : "<<a<<" Address of a : "<<&a <<endl;
    cout<<"Value of b : "<<b<<" Address of b : "<<&b <<endl;

    short s=20; //2 bytes
    cout <<"Value of s : "<< s << endl;

    float f1=20.03; //4 bytes
    double d1=50.55416416; //8 bytes
    cout <<"Value of f1 : "<< f1 << endl;
    cout <<"Value of d1 : "<< d1 << endl;

    char c1='A';
    cout<<c1<<endl;

    string s1="Hello Tridib";
    cout<<s1<<endl;

    string s2="Welcome to CPP !";
    cout<<s2<<endl;

    string combineStrings=s1+", "+s2;
    cout<<combineStrings<<endl;

    bool b1=true; //Boolean is true or false. FALSE IS ALWAYS ZERO, EVERY OTHER NUMBER IS TRUE.
    cout<<b1<<endl;
    b1=1515;
    cout<<b1<<endl;
    b1=-445;
    cout<<b1<<endl;
    b1=0;
    cout<<b1<<endl;

    //Positive numbers or unsigned numbers. Increases the positive range.
    unsigned short int u1=60445;
    cout<< u1 <<endl;

    const string myname="Tridib";
    cout << myname << endl;

}

该代码是用C++编写的,它包含了各种数据类型的声明和初始化,以及如何使用cout语句来打印这些变量的值和地址。下面是每行的详细解析:

以上就是对这段代码的详细解析。

  1. #include<iostream>: 包含输入/输出流的库。这使得程序可以使用输入和输出功能。
  2. using namespace std;: 声明使用std命名空间。std是标准缩写,表示标准库。这样,我们就可以直接使用标准库中的名字,而不用在每个名字前都写std::
  3. main(): 程序的主函数,所有C++程序都从这里开始执行。
  4. int a=10,b=35;: 声明两个整数变量a和b并初始化为10和35。
  5. cout<<"Value of a : "<<a<<" Address of a : "<<&a <<endl;: 使用cout打印"Value of a : "和变量a的值,然后打印"Address of a : "和变量a的地址。&操作符用于获取变量的内存地址。endl用于插入新行。
  6. cout<<"Value of b : "<<b<<" Address of b : "<<&b <<endl;: 与上述类似,但打印的是变量b的值和地址。
  7. short s=20;: 声明一个短整型变量s并初始化为20。在大多数系统上,short通常是2字节(16位)。
  8. cout <<"Value of s : "<< s << endl;: 使用cout打印"Value of s : "和变量s的值。
  9. float f1=20.03;: 声明一个单精度浮点型变量f1并初始化为20.03。在大多数系统上,float通常是4字节(32位)。
  10. double d1=50.55416416;: 声明一个双精度浮点型变量d1并初始化为50.55416416。在大多数系统上,double通常是8字节(64位)。
  11. cout <<"Value of f1 : "<< f1 << endl;: 使用cout打印"Value of f1 : "和变量f1的值。
  12. cout <<"Value of d1 : "<< d1 << endl;: 使用cout打印"Value of d1 : "和变量d1的值。
  13. char c1='A';: 声明一个字符变量c1并初始化为'A'。
  14. cout<<c1<<endl;: 使用cout打印变量c1的值,也就是字符'A'。
  15. string s1="Hello Tridib";: 声明一个字符串变量s1并初始化为"Hello Tridib"。
  16. cout<<s1<<endl;: 使用cout打印变量s1的值,也就是"Hello Tridib"。
  17. string s2="Welcome to CPP !";: 声明另一个字符串变量s2并初始化为"Welcome to CPP !"。
  18. cout<<s2<<endl;: 使用cout打印变量s2的值,也就是"Welcome to CPP !"。
  19. string combineStrings=s1+", "+s2;: 将s1和s2连接在一起,创建一个新的字符串combineStrings。
  20. cout<<combineStrings<<endl;: 使用cout打印变量combineStrings的值,也就是"Hello Tridib, Welcome to CPP !"。
  21. bool b1=true;: 声明一个布尔型变量b1并初始化为true。在C++中,布尔类型的值只能是true或false。
  22. cout<<b1<<endl;: 使用cout打印变量b1的值,也就是true。在C++中,输出布尔值时会自动转换为字符串"true"或"false"。
  23. b1=1515;: 将变量b1的值更改为整数1515。在C++中,布尔类型的值也可以是0或非0的任何整数。
  24. cout<<b1<<endl;: 使用cout打印变量b1的值,由于非零的整数会被视为true,所以这里输出的是true。
  25. b1=-445;: 将变量b1的值更改为-445。
  26. cout<<b1<<endl;: 使用cout打印变量b1的值,由于非零的整数会被视为true,所以这里

    输出的是true。

  27.  b1=0;: 将变量b1的值更改为0。

  28. cout<<b1<<endl;: 使用cout打印变量b1的值,由于布尔类型的值只能是true或false,所以这里输出的是false。
  29. unsigned short int u1=60445;: 声明一个无符号短整型变量u1并初始化为60445。在大多数系统上,unsigned short通常是2字节(16位)。
  30. cout<< u1 <<endl;: 使用cout打印变量u1的值。由于是无符号类型,所以可以输出大于255的整数。
  31. const string myname="Tridib";: 声明一个常量字符串变量myname并初始化为"Tridib"。const关键字表示该变量的值不能被修改。
  32. cout << myname << endl;: 使用cout打印变量myname的值,也就是"Tridib"。

C++是一种多范式编程语言,支持多种变量类型。下面是C++中主要的变量类型及其描述:

  1. 基本类型

    • 整数类型:这些类型用于存储整数值。有符号和无符号两种类型。

      • int: 通常为32位,但大小可能因平台而异。
      • short: 通常为16位。
      • long: 通常为32位或64位,大小可能因平台而异。
      • long long: 通常为64位,大小可能因平台而异。
    • 浮点类型:这些类型用于存储带有小数点的值。

      • float: 单精度,通常为32位。
      • double: 双精度,通常为64位。
    • 字符类型:这些类型用于存储单个字符或ASCII值。

      • char: 有符号或无符号,通常为8位。
    • 布尔类型bool,用于存储逻辑值,可以取truefalse

  2. 复合类型

    • 数组:用于存储相同类型的多个元素。
    • 字符串:字符数组,用于存储多个字符。
    • 结构体:用于将多个不同类型的变量组合在一起。
    • 联合体:用于在内存中共享多个不同数据类型的变量。
  3. 指针类型

    • int *p;:定义一个指向整数的指针。
    • double *dp;:定义一个指向双精度浮点数的指针。
    • char *cp;:定义一个指向字符的指针。
  4. 引用类型

    • int &ref;:定义一个对整数变量的引用。引用和它引用的变量在内存中是同一实体。
  5. 枚举类型

    • enum color { red, green, blue };:定义了一个名为color的枚举类型,包含三个可能的值:red、green和blue。
  6. 自定义类型

    • :定义自定义的数据类型和方法。类是一种用户自定义的数据类型,可以包含属性(变量)和方法(函数)。
  7. 特殊类型

    • void:表示无类型,常用于函数的返回值类型,如void func()表示该函数没有返回值。
    • const:表示常量,一旦给定值就不能改变。例如const int a = 10;,a的值就不能再改变。
    • volatile:表示易变的,即程序无法预知该变量的值会随时发生变化。例如硬件寄存器的值、正在运行的进程等。
  8. 复合类型(如数组、指针、引用等)的进一步扩展:

    • 指针数组:数组的元素是指针类型。例如int *arr[5]定义了一个包含5个指向整数的指针的数组。
    • 指向指针的指针:例如int **pp;定义了一个指向指针的指针,该指针可以指向一个整数类型的变量。
    • 引用数组:例如int &arr[5]定义了一个包含5个整数引用的数组。每个引用都是它引用的数组元素的别名。
  9. 函数指针:指向函数的指针,例如int (*fp)(int)定义了一个接受一个整数参数并返回一个整数的函数指针。

  10. 智能指针:C++11引入了智能指针,以帮助管理动态分配的内存。智能指针是一种类,它以一种安全的方式自动管理动态分配的内存。以下是一些智能指针类型:

    • std::unique_ptr<T>:这种类型的指针在离开作用域时自动删除其所有权。它只能指向一个对象,并保证其指向的对象在任何时刻都有一个所有者。
    • std::shared_ptr<T>:这种类型的指针允许多个智能指针共享同一个对象。当最后一个智能指针离开作用域或被重置时,它会自动删除所指向的对象。
    • std::weak_ptr<T>:这种类型的指针也是指向共享对象的,但不会增加对象的引用计数。当最后一个shared_ptr离开作用域或被重置时,weak_ptr将看到对象的析构。

这些是C++中的主要变量类型。根据需要,还可以创建自定义类型和结构,以满足特定的编程需求。

C++14引入了一些新的变量类型,这些类型在C++11和C++17中都有所扩展。以下是一些C++14中引入的新变量类型:

  1. 原子类型(Atomic Types):这些类型定义在<atomic>头文件中,用于表示可以在不引起其他线程阻塞的情况下被单独操作的值。原子类型包括整数、浮点数和指针类型。

    • atomic<T>:定义了一个原子操作的基本类型。原子操作是一种在单个线程中执行的操作,它可以在没有其他线程干扰的情况下修改数据。
    • atomic_flag:定义了一个原子标志,可以用于实现简单的原子布尔操作。
  2. 数组的初始化:C++14引入了一种新的数组初始化方法,允许使用花括号{}进行初始化。例如:

 

cpp复制代码

int arr[] = {1, 2, 3, 4, 5};
  1. 通用 Lambda 捕获:C++14引入了通用 lambda 捕获,允许捕获变量,无论它们是否在作用域中。例如:

 

cpp复制代码

auto lambda = [captured_var = some_global_var](){ /* Use captured_var */ };
  1. 右值引用(Rvalue References):进一步扩展了右值引用,使其更易于使用和更灵活。C++14引入了std::movestd::forward函数,用于移动语义和完美转发。
  2. 类型萃取(Type deduction):C++14引入了一些新的类型萃取规则,包括萃取数组和函数类型的参数。
  3. Unicode 支持:C++14引入了更全面的 Unicode 支持,包括新的字符类型和函数。
  4. 线程局部存储(Thread-local storage):C++14引入了线程局部存储,允许为每个线程存储单独的变量副本。
  5. 二进制字面值:C++14引入了新的二进制字面值,包括二进制整数和二进制浮点数。
  6. 字面值的显示浮点数:C++14允许在字面值中使用显示浮点数,例如0x1p+2n表示一个十六进制浮点数。

这些是C++14引入的一些主要变量类型和功能。这些功能增强了语言的表达力和性能,并提供了更多的灵活性和控制。

C++20引入了一些新的变量类型和功能,进一步扩展了语言的表达力和性能。以下是一些C++20中引入的新变量类型和功能:

  1. 概念(Concepts):概念是一种用于指定类型必须满足的条件的语言特性。可以使用概念来约束模板参数的类型,以便在模板实例化时确保类型符合特定的要求。这有助于提高代码的可读性和可维护性。

 

cpp复制代码

template <typename T> concept bool C() { return requires (T t) { t++; }; }
template <C T> void f(T t) { ++t; }
  1. 结构化绑定(Structured Binding):C++20引入了结构化绑定,允许将一个表达式的值直接分配给多个变量。这使得在解构数组、元组或其他复合类型时更加方便。

 

cpp复制代码

int a = 1, b = 2;
auto [c, d] = a + b; // c = 3, d = 3
  1. if constexpr:C++20引入了if constexpr语句,它允许在编译时根据条件选择不同的代码路径。这对于在编译时进行条件编译和静态分派非常有用。

 

cpp复制代码

template <typename T> void f(T value) {
if constexpr (std::is_integral_v<T>) {
// 处理整数类型
} else if constexpr (std::is_floating_point_v<T>) {
// 处理浮点数类型
}
}
  1. 三向比较(Three-way Comparison):C++20引入了三向比较运算符<=>,用于执行基于比较的操作。这可以用于实现自定义类型的比较操作。
  2. 模板别名(Template Aliases):C++20引入了模板别名,允许使用别名来简化模板的声明和使用。
  3. 折叠表达式(Fold Expressions):C++20引入了折叠表达式,允许在展开二元或三元运算符时进行递归计算。这对于实现高阶函数和泛型算法非常有用。
  4. 嵌套的命名空间(Nested Namespaces):C++20允许在命名空间内部定义另一个命名空间,以更好地组织代码。
  5. 上下文重复名称(Contextual Repeated Name):C++20允许在特定上下文中重复使用名称,这有助于提高代码的可读性。
  6. 模块(Modules):C++20引入了模块,这是一种将代码划分为逻辑单元的方式,以提高编译速度和代码组织。模块可以用于实现特定功能或库的封装和重用。
  7. 概念工具(Concept Tools):C++20提供了一组工具,用于定义和操作概念。这有助于提高代码的可读性和可维护性。

这些是C++20引入的一些主要变量类型和功能。这些功能进一步增强了语言的表达力和性能,并提供了更多的灵活性和控制。


Arduino

#include <avr/pgmspace.h>  
  
void setup() {  
  Serial.begin(9600);  
  
  int a = 10;  
  Serial.print("Value of a : ");  
  Serial.print(a);  
  Serial.print(" Address of a : ");  
  Serial.println(&a);  
  
  short s = 20;  
  Serial.print("Value of s : ");  
  Serial.println(s);  
  
  float f1 = 20.03;  
  Serial.print("Value of f1 : ");  
  Serial.print(f1);  
  Serial.println();  
  
  double d1 = 50.55416416;  
  Serial.print("Value of d1 : ");  
  Serial.println(d1);  
  
  char c1 = 'A';  
  Serial.print(c1);  
  Serial.println();  
  
  const char* s1 = "Hello Tridib";  
  Serial.println(s1);  
  
  const char* s2 = "Welcome to CPP !";  
  Serial.println(s2);  
  
  const char* combineStrings = pgm_read_word(&combineStrings); //pgm_read_word(&combineStrings) is used to get the address of the combineStrings variable in flash memory space and is not related to the original code  
  Serial.println(combineStrings);  
  
  bool b1 = true;  
  Serial.println(b1);  
  b1 = 1515;  
  Serial.println(b1);  
  b1 = -445;  
  Serial.println(b1);  
  b1 = 0;  
  Serial.println(b1);  
  
  unsigned short int u1 = 60445;  
  Serial.println(u1);  
}  
  
void loop() {  
  // put your main code here, to run repeatedly:  
}

Arduino IDE使用的是C++的变量类型,因此它支持C++的所有常见变量类型。以下是在Arduino IDE中常用的C++变量类型:

  1. 基本类型

    • int: 用于表示整数值,通常为16位。
    • unsigned int: 用于表示无符号整数值,通常为16位。
    • long: 用于表示长整数值,通常为32位。
    • unsigned long: 用于表示无符号长整数值,通常为32位。
    • char: 用于表示字符值,通常为8位。
    • bool: 用于表示布尔值,可以取truefalse
    • float: 用于表示单精度浮点数值,通常为32位。
    • double: 用于表示双精度浮点数值,通常为64位。
  2. 指针类型

    • int *p;:定义一个指向整数的指针。
    • char *str;:定义一个指向字符数组的指针。
  3. 数组类型

    • int arr[10];:定义一个包含10个整数的数组。
    • char str[] = "Hello";:定义一个包含字符串"Hello"的字符数组。
  4. 结构体类型

    • struct MyStruct { int id; char name[20]; };:定义一个名为MyStruct的结构体,包含一个整型成员变量id和一个字符数组成员变量name。
  5. 联合体类型

    • union MyUnion { int id; char name[20]; };:定义一个名为MyUnion的联合体,包含一个整型成员变量id和一个字符数组成员变量name。
  6. 函数类型

    • int myFunction(int arg1, char arg2);:定义一个名为myFunction的函数,接受一个整型参数arg1和一个字符型参数arg2,并返回一个整型值。
  7. 自定义类型

    • typedef int MyInt;:定义一个新的类型别名MyInt,相当于int类型。
  8. 枚举类型

    • enum MyEnum { RED, BLUE, GREEN };:定义一个名为MyEnum的枚举类型,包含三个可能的值:RED、BLUE和GREEN。
  9. 类型转换

    • 自动类型转换:将一种类型的值赋给另一种类型的变量时,编译器会自动进行类型转换。例如,将一个整数值赋给一个浮点变量时,编译器会将整数值转换为浮点数。
    • 强制类型转换:使用强制类型转换运算符将一种类型的值转换为另一种类型。例如,(float) x将x转换为浮点数类型。
  10. 常量和常量表达式

    • 常量:使用const关键字定义常量,其值在程序运行期间不可改变。例如,const int kConstantValue = 42;
    • 常量表达式:使用const和字面值初始化器定义常量表达式。常量表达式必须是可以在编译时计算出结果的表达式,不能包含变量或函数调用。例如,const int kConstantExpression = 4 * 7;是常量表达式,而const int kVariableExpression = k + 1;不是常量表达式,因为k的值在编译时无法确定。

这些是在Arduino IDE中常用的C++变量类型和相关概念。了解这些变量类型和概念对于编写Arduino程序非常重要。


ROS1

AI生成是否可行???

#include <ros/ros.h>  
#include <std_msgs/String.h>  
  
int main(int argc, char **argv)  
{  
    ros::init(argc, argv, "my_node");  
    ros::NodeHandle nh;  
  
    int a=10,b=35; // 4 bytes  
    ros::console::cout << "Value of a : " << a << " Address of a : " << &a << ros::console::endl;  
    ros::console::cout << "Value of b : " << b << " Address of b : " << &b << ros::console::endl;  
  
    short s=20; //2 bytes  
    ros::console::cout << "Value of s : " << s << ros::console::endl;  
  
    float f1=20.03; //4 bytes  
    ros::console::cout << "Value of f1 : " << f1 << ros::console::endl;  
  
    double d1=50.55416416; //8 bytes  
    ros::console::cout << "Value of d1 : " << d1 << ros::console::endl;  
  
    int c1 = 65;  
    ros::console::cout << c1 << ros::console::endl;  
  
    std_msgs::String s1;  
    s1.data = "Hello Tridib";  
    ros::console::cout << s1.data << ros::console::endl;  
  
    std_msgs::String s2;  
    s2.data = "Welcome to CPP !";  
    ros::console::cout << s2.data << ros::console::endl;  
  
    // string concatenation not supported in ROS  
    // you can use roscpp'sRosOutSignal to achieve this easily.  
    // RosOutSignal().outStr(s1.data + ", " + s2.data);   
    // instead of the line above you can do:  
    std_msgs::String combineStrings;  
    combineStrings.data = s1.data + ", " + s2.data;  
    ros::console::cout << combineStrings.data << ros::console::endl;  
  
    bool b1=true; //Boolean is true or false. FALSE IS ALWAYS ZERO, EVERY OTHER NUMBER IS TRUE.  
    ros::console::cout << b1 << ros::console::endl;  
    b1=1515;  
    ros::console::cout << b1 << ros::console::endl;  
    b1=-445;  
    ros::console::cout << b1 << ros::console::endl;  
    b1=0;  
    ros::console::cout << b1 << ros::console::endl;  
  
    //Positive numbers or unsigned numbers. Increases the positive range.  
    unsigned short int u1=60445;  
    ros::console::cout << u1 << ros::console::endl;  
  
    // const string myname="Tridib"; is not supported in ROS, you should use a string_view instead. (not implemented in roscpp at the time of writing)  
}

ROS1 Noetic是ROS1的一个版本,使用C++作为主要的编程语言。在ROS1 Noetic中,常见的C++变量类型包括以下几种:

  1. 基本类型:与标准C++相同,包括int、float、double、char等。
  2. 智能指针类型:ROS1 Noetic主要使用std::shared_ptrstd::unique_ptr两种智能指针类型,用于自动管理资源的生命周期。
  3. 回调函数类型:ROS1 Noetic提供了ROS1特定的回调函数类型,如boost::functionboost::slot,用于实现事件驱动的回调机制。
  4. 命名空间:ROS1 Noetic使用了多个命名空间,如rosstd_msgssensor_msgs等,用于组织和管理ROS相关的代码和消息类型。
  5. 消息类型:ROS1 Noetic使用特定的消息类型,如std_msgs::Stringsensor_msgs::Image等,用于在ROS系统中进行节点之间的通信。这些消息类型通常定义在ROS1的消息规范中。
  6. 服务类型:ROS1 Noetic使用特定的服务类型,如ros::ServiceServerros::ServiceResponse,用于在ROS系统中实现服务调用。这些服务类型定义在ROS1的服务规范中。
  7. 动作类型:ROS1 Noetic使用特定的动作类型,如actionlib::SimpleActionClientactionlib::SimpleGoal,用于在ROS系统中实现复杂的行为控制。这些动作类型定义在ROS1的动作规范中。

除了上述变量类型外,ROS1 Noetic还提供了许多其他的工具和库,用于实现机器人控制、传感器数据处理、可视化等功能。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/860583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序的介绍

排序算法介绍 排序是计算机内经常进行的一种操作&#xff0c;其目的是将一组“无序”的记录序列调整为“有序”的记录序列 粗暴理解 将杂乱无章的数据元素&#xff0c;通过一定的方法按照关键字顺序排列的过程叫做排序 排序分内部排序和外部排序&#xff0c;若整个排序过程不需…

4路光栅尺磁栅尺编码器5MHz高速差分信号转Modbus TCP网络模块 YL97

特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 光栅尺5V差分信号直接输入&#xff0c;4倍频计数 ● 模块可以输出5V的电源给光栅尺供电 ● 高速光栅尺磁栅尺计数&#xff0c;频率可达5MHz ● 支持4个光栅尺同时计数&#xff0c;可识别正反转 ● 可网…

JD商品详情页面+关键词搜索商品列表API接口数据,详情页面数据返回值说明

作为一个工作助手&#xff0c;我无法直接为您提供实时的京东商品详情。您可以通过访问京东官方网站或使用API接口来查看商品的详细信息。每个商品的详情页面通常会包括以下内容&#xff1a; 1. 商品标题&#xff1a;商品的名称和简要描述。 2. 价格信息&#xff1a;包括原价、…

常见问题03:SpringBoot项目启动初始化数据(执行sql文件)

1、类ResourceDatabasePopulator介绍 使用外部资源中定义的 SQL 脚本填充、初始化或清理数据库。 调用addScript(org.springframework.core.io.Resource)以添加单个 SQL 脚本位置。调用addScripts(org.springframework.core.io.Resource…)以添加多个 SQL 脚本位置。请参阅此类…

通讯协议035——全网独有的OPC HDA知识一之聚合(四)平均值

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

Spring之事务管理

文章目录 前言一、事务及其参数含义1.事务的四个特性2.事务的传播行为&#xff08;propagation&#xff09;3.事务隔离性4.事务的隔离级别&#xff08;ioslation&#xff09;5.timeout&#xff08;超时&#xff09;6.readOnly&#xff08;是否只读&#xff09;7.rollbackFor&am…

Apache Maven:从构建到部署,一站式解决方案

目录 一、Maven介绍 1. Maven是什么&#xff1f; 2.Maven的作用&#xff1f; 二、Maven仓库介绍 2.1 库的分类 三、Maven安装与配置 3.1 Maven安装 3.2 Maven环境配置 3.3 仓库配置 四、Eclipse与Maven配置 五、Maven项目测试 5.1 新建Maven项目步骤及注意事项 5.…

单调递增的数字——力扣738

文章目录 题目描述解法题目描述 解法 #include<iostream> #include<string>using namespace std;int monotoneIncreasingDigits

WhatsApp 实时聊天小插件:快速触达客户的秘密

当您进入商店时&#xff0c;您希望销售人员会向您打招呼&#xff0c;或者至少在您需要时可以找到人提供帮助。对于电子商务商店&#xff0c;客户的期望不会降低。但谁应该担任 24-7的商店经理&#xff1f;实时聊天可以成为您的电子商务商店经理。 什么是 WhatsApp 实时聊天小插…

python中字符串的内建函数之expandtabs的用法

一、str.expandtabs() 进入这个函数之前&#xff0c;我们来看看: str_1 abc\tdef print(str_1) # abc defstr_2 \t print(len(str_2)) # 1根据打印结果来看&#xff0c;abc距离def一个字符的间距。在字符串中\t的长度为1&#xff08;tab键也就是\t&#xff0c;通常说的是…

07-1_Qt 5.9 C++开发指南_文件系统及文件读写_文本文件读写(使用 QTextStream 进行文件读写更为方便)

文章目录 1. 实例功能概述2. QFile 读写文本文件3. QFile 和QTextStream 结合读写文本文件4. 解决中文乱码的问题5. 框架及源码5.1 可视化UI设计5.2 mainwindow.h5.3 mainwindow.cpp5.4 main.cpp 1. 实例功能概述 文本文件是指以纯文本格式存储的文件&#xff0c;例如用 Qt Cr…

个人网站使用又拍云实现CDN加速

前言&#xff1a;前几篇文章完成了将个人博客部署到阿里云服务器上并实现了https加密访问&#xff0c;但是由于图片以及js文件较大&#xff0c;访问速度较慢并且不太稳定&#xff0c;就想着使用CDN加速一下网站访问速度&#xff0c;于是就有了这篇文章。 前置条件&#xff1a; …

类和对象的学习

类和对象说明 类的属性和方法 类的入门案例 //类名 public class school {//属性String name; //名称int jsNumber; //教室数目int jfNumber;//机房数目//方法public void show(){System.out.println("名称: " name "教室数目" jsNumber " , 机房数…

双端列表 —— Deque 接口概述,使用ArrayDeque实现队列和双端队列数据结构

Deque接口简介 Deque译为双端队列&#xff0c;在双向都能作为队列来使用&#xff0c;同时可用作栈。Deque接口的方法是对称成比例的。 Deque接口继承Queue接口&#xff0c;因此具有Queue&#xff0c;Collection&#xff0c;Iterable的方法属性。 双端队列的工作原理 在常规队…

什么是 Redis ? Redis缓存应用场景有哪些?

面试官问题 redis击穿、穿透有什么区别&#xff1f; 如何设计用例及测试 Redis 的基本概念 在没有添加 Redis 的时候&#xff0c;后端的查询流程是&#xff1a; 用户访问页面。 请求后端服务。 经过逻辑处理后&#xff0c;去数据库查询信息。 在添加 Redis 的之后&#xf…

CTF之Web安全SSI注入

前言 如何从外部进入主机&#xff1f; SSI注入攻击介绍 SSI(server side inject)的出现是为了赋予HTML静态页面动态的效果&#xff0c;通过SSI来执行系统命令&#xff1b;并返回对应的结果。 如果再网站目录中发现了.stm&#xff1b;.shtm&#xff1b;.shtml&#xff1b;这…

五粮液快闪酒吧亮相大运会,在传承中彰显创新精神

摇风、糖塑、弄窑、趣闻、琉璃、沉香、绣彩、刻花......一座以“中国风&#xff0c;巴蜀韵”为主题的快闪酒吧&#xff0c;是五粮液献给中外来宾的“和美之礼”&#xff0c;一项项身临其境的传统文化体验让全球友人仿佛“梦回大唐盛世&#xff0c;再现繁华风尚”。 &#xff0…

harbor仓库安装部署(1.6.1)

目录 1、关闭防火墙 2、安装docker-ce&#xff08;所有主机&#xff09; 3、配置阿里云镜像加速器 4、部署Docker Compose 服务 5、部署 Harbor 服务 6、下载 Harbor 安装程序&#xff08;两台harbor主机&#xff09; 7、配置 Harbor 参数文件 8、启动并安装 Harbor …

【CSS3】CSS3 动画 ⑤ ( 动画速度曲线 | 设置动画步长 | 动画匀速执行 | 动画分 2 步执行 | 使用动画步长实现打字机效果 )

文章目录 一、动画速度曲线设置二、代码示例 - 动画速度曲线设置1、代码示例 - 动画匀速执行2、代码示例 - 动画分 2 步执行 三、代码示例 - 使用动画步长实现打字机效果 一、动画速度曲线设置 CSS3 样式中 , 设置 动画速度曲线 的属性是 animation-timing-function 属性 ; an…

Kubernetes集群yum安装部署

第四阶段 时 间&#xff1a;2023年8月10日 参加人&#xff1a;全班人员 内 容&#xff1a; Kubernetes集群yum安装部署 目录 yum方式部署K8S集群 一、环境搭建 1、准备环境 2、关闭防火墙 3、修改master主机的计算机名设置host文件 二、安装部署 &#xff08;一&…