当前位置: 首页 > news >正文

济南企业网站网站建设规划面试技巧

济南企业网站,网站建设规划面试技巧,学校网站信息化建设工作心得,阿里巴巴运营培训课程文章目录【 1. 基础概念 】与 pair 和 struct 的对比【 2. tuple 的创建 】2.1 构造函数的方式创建2.2 使用花括号初始化2.3 使用 std::make_tuple2.4 使用 std::tie(用于解包,但也可用于初始化空 tuple)2.5 empty_tuple 创建空 tuple2.6 从 …

文章目录

  • 【 1. 基础概念 】
    • 与 `pair` 和 `struct` 的对比
  • 【 2. tuple 的创建 】
    • 2.1 构造函数的方式创建
    • 2.2 使用花括号初始化
    • 2.3 使用 `std::make_tuple`
    • 2.4 使用 `std::tie`(用于解包,但也可用于初始化空 tuple)
    • 2.5 `empty_tuple` 创建空 tuple
    • 2.6 从 tuple 创建另一个 tuple(类型转换)
  • 【 3. 访问 tuple 元素 】
    • 3.1 使用 `std::get<index>(tuple)`
    • 3.2 结构化绑定(C++17,强烈推荐)
  • 【 4. tuple 的操作 】
    • 4.1 获取 tuple 大小 `tuple_size_v<decltype(t)>`
    • 4.2 获取特定位置的类型
    • 4.3 比较操作
    • 4.4 拼接 tuple `std::tuple_cat`
    • 4.5 遍历 tuple
  • 【 5. 应用场景 】
    • 5.1 函数返回多个值
    • 5.2 作为容器的键

【 1. 基础概念 】

std::tuple 在 C++11 引入,用于将不同类型的数据组合成一个单一的对象。它类似于 std::pair,但可以包含任意数量的元素(包括零个)。

  • 定义std::tuple 是一个模板类,可以存储固定数量的、不同类型的数据元素。
  • 头文件#include <tuple>
  • 命名空间std
  • 编译时确定大小:tuple 的大小(即包含的元素个数)在编译时就已经完全确定,并且不可改变。它不是动态容器。

pairstruct 的对比

特性std::tuplestd::pairstruct
元素数量任意2任意
元素命名无(通过索引)first, second自定义
可读性
灵活性
适用场景临时组合、泛型键值对有明确语义的数据

【 2. tuple 的创建 】

2.1 构造函数的方式创建

tuple<int, string, double> t1(10, "Zhen", 95.5);

2.2 使用花括号初始化

tuple<int, string> t2{42, "Sheng"};
tuple<int, string> t3 = {42, "Wo"};
tuple<int, double> t4{}; // 所有成员被默认初始化
tuple<int, double> t5 = {}; // 所有成员被默认初始化

2.3 使用 std::make_tuple

auto t4 = make_tuple(20, "Ai", 88.0);
// 类型自动推导,推荐使用

2.4 使用 std::tie(用于解包,但也可用于初始化空 tuple)

int a; 
string b ;
double c;
auto t3 = tie(a, b, c); // 创建引用 tuple

2.5 empty_tuple 创建空 tuple

tuple<> empty_tuple;

2.6 从 tuple 创建另一个 tuple(类型转换)

auto t1 = make_tuple(1, 2.5);
auto t2 = make_tuple<long, float>(t1); // 类型转换

【 3. 访问 tuple 元素 】

3.1 使用 std::get<index>(tuple)

  • 通过索引访问元素(索引从 0 开始)
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main() {tuple <int,float,string>(1314, 0.521, "Ni");// 通过索引访问元素(索引从 0 开始)cout << "Index 0: " << get<0>(t) << "\n";cout << "Index 1: " << get<1>(t) << "\n";cout << "Index 2: " << get<2>(t) << "\n";return 0;
}
  • 注意索引 inde 必须是编译时常量,不能是变量
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main() {tuple <int,float,string> t(1314, 0.521, "Ni");int index = 0;// 报错:get<>() 的 <> 中必须是常量cout << "Index 0: " << get<index>(t) << "\n";//正确cout << "Index 0: " << get<0>(t) << "\n";return 0;
}
  • std::get 也可以用于修改元素:
tuple <int,float,string> t(1314, 0.521, "Ni");
get<2>(t) = "new";

3.2 结构化绑定(C++17,强烈推荐)

  • 这是访问 tuple 最优雅的方式:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main() {auto t = make_tuple(42, 3.14, string("Modern C++"));// 结构化绑定:将 tuple 解包为独立变量auto [id, value, name] = t; // 这行代码的含义是:“把这个 tuple 类型的变量 t 的第一个元素绑定到名为 id 的变量,第二个绑定到 value,第三个绑定到 name。”cout << "ID: " << id << ", Value: " << value << ", Name: " << name << "\n";// 也可以声明为引用以修改原 tupleauto& [ref_id, ref_value, ref_name] = t;ref_id = 99;cout << "Modified ID: " << get<0>(t) << "\n"; // 99return 0;
}

【 4. tuple 的操作 】

4.1 获取 tuple 大小 tuple_size_v<decltype(t)>

tuple_size_v<decltype(t)>

auto t = std::make_tuple(1, 2.5, "hello", true);
constexpr size_t size = tuple_size_v<decltype(t)>; // C++17// 输出为 3

4.2 获取特定位置的类型

auto t = std::make_tuple(1, 2.5, "hello", true);
using ThirdType = tuple_element_t<2, decltype(t)>;
// ThirdType 是 std::string

4.3 比较操作

  • tuple 支持完整的比较操作(==, !=, <, <=, >, >=),按字典序比较:
  • tuple 内的元素依次比较,直到比较出结果
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main() {auto t1 = make_tuple(1, "apple");auto t2 = make_tuple(1, "banana");auto t3 = make_tuple(2, "apple");cout << (t1 < t2) << "\n";  // 1cout << (t1 < t3) << "\n";  // 1cout << (t2 < t3) << "\n";  // 1return 0;
}

4.4 拼接 tuple std::tuple_cat

#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main() {auto t1 = make_tuple(1, 2);auto t2 = make_tuple(3.14, "pi");auto t3 = make_tuple(true);// 拼接多个 tupleauto combined = tuple_cat(t1, t2, t3);// combined 类型: tuple<int, int, double, const char*, bool>cout << "Combined size: " << tuple_size_v<decltype(combined)> << "\n";return 0;
}

4.5 遍历 tuple

// C++17 示例:打印 tuple 所有元素
template<typename Tuple, std::size_t... I>
void print_tuple_impl(const Tuple& t, std::index_sequence<I...>) {((std::cout << (I == 0 ? "" : ", ") << std::get<I>(t)), ...);std::cout << "\n";
}template<typename... Args>
void print_tuple(const std::tuple<Args...>& t) {print_tuple_impl(t, std::index_sequence_for<Args...>{});
}// 使用
auto t = std::make_tuple(1, 2.5, "hello");
print_tuple(t); // 输出: 1, 2.5, hello

【 5. 应用场景 】

5.1 函数返回多个值

#include <tuple>
#include <iostream>
using namespace  std;tuple<int, int, double> divide_with_remainder(int a, int b) {return make_tuple(a / b, a % b, static_cast<double>(a) / b);
}int main() {auto [quotient, remainder, decimal] = divide_with_remainder(10, 3);cout << "Quotient: " << quotient << ", Remainder: " << remainder << ", Decimal: " << decimal << "\n";return 0;
}

5.2 作为容器的键

map<tuple<int, string>, double> student_grades;
student_grades[{1, "Math"}] = 95.5;
student_grades[{1, "English"}] = 87.0;
http://www.dtcms.com/a/500832.html

相关文章:

  • 网站建设的工作在哪里找客户资源公司flash网站模板
  • 网站 目标有哪些网站可以免费的
  • 杨-米尔斯方程 Fμν = ∂μAν - ∂νAμ + ig[Aμ, Aν]
  • 北京 网站制作2022年最新热点素材
  • 各大房产网站宁波seo排名如何优化
  • 电子商务网站建设实验总结wordpress修改域名
  • 【Python】KMP算法
  • 利用大平台做网站邯郸网站建设选哪家好
  • 网站备案需要建设好网站吗百度域名地址查询
  • MyBatis 工作原理
  • 企业网站建设找哪家公众号背景图怎么制作
  • 协会宣传网站开发方案汕头网站时优化
  • 东莞餐饮网站建设济源市工程建设监理所网站
  • 网站群建设成本分析网页设计重庆
  • 抽奖网站做的下去吗北京 手机网站建设
  • php语言做购物网站广州公司注册无地址
  • 网站定制开发流程和功能wap 2.0的网站
  • 网站建设产品展示型的专业版式设计网站
  • 购物网站开发中查看订单的实现逻辑网站发布和推广
  • CentOS 7 虚拟IP配置指南:使用传统network-scripts实现高可用
  • 网站建设商务代表工作总结代账公司注册条件
  • 苏州企业网站建设专家番禺做网站多少钱
  • icp备案 网站负责人福建网站建设价格
  • 在AGX上安装opencv4的cuda版本,带有GPU加速的opencv库
  • 深圳专业做网站排名多少钱无锡网页制作服务
  • 【学习系列】SAP RAP 8:行为定义-Authorization Control
  • 河北建设厅网站修改密码在哪网站建设百度推广总结
  • Java Web API 开发完整指南
  • 网站建设与管理复习知识点购物网站怎么创建
  • IEEE 802.11无线wifi帧结构