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

用php做商城网站的设计论文windows优化大师靠谱吗

用php做商城网站的设计论文,windows优化大师靠谱吗,威宁住房和城乡建设局网站,怎么做网站弹窗目录 1. C风格的数组(不建议)1.1 初始化1.2 获取数组大小1.3 多维数组 2. std::array(C11)3. std::vector4. std::pair5. std::optional(C17)参考 1. C风格的数组(不建议) 1.1 初始化 数组具有一系列的值,所有值的类型相同,每个值可根据它在数组中的位置…

目录

  • 1. C风格的数组(不建议)
    • 1.1 初始化
    • 1.2 获取数组大小
    • 1.3 多维数组
  • 2. std::array(C++11)
  • 3. std::vector
  • 4. std::pair
  • 5. std::optional(C++17)
  • 参考

1. C风格的数组(不建议)

1.1 初始化

  数组具有一系列的值,所有值的类型相同,每个值可根据它在数组中的位置进行访问。在C++中声明数组时,必须声明数组的大小。数组的大小不能用变量表示——必须用常量或常量表达式表示数组大小。在下面的代码中,首先声明了具有3个整数的数组,之后的三行语句将每个元素初始化为0。

int myArray[3];
myArray[0] = 0;
myArray[1] = 0;
myArray[2] = 0;

  警告:在C++中,数组的第一个元素始终在位置0,而非位置1!数组的最后一个元素的位置始终是数组大小减1。
  使用循环可初始化每个元素。但不使用循环或前面的初始化机制,也可以使用如下的单行代码完成零初始化的操作。
  int myArray[3] = { 0 };
  甚至可以省略0,如下所示:
  int myArray[3] = {};
  最后,等号也是可选的,所以可以写出如下所示的代码:
  int myArray[3] {};
  数组也可以用初始化列表初始化,此时编译器可自动推断数组的大小。例如:
  int myArray[] { 1, 2, 3, 4 }; // the compiler creates an array of 4 elements.
  如果指定了数组的大小,而初始化列表包含的元素数量少于给定大小,则将其余元素设置为0。例如,以下代码仅将数组中的第一个元素设置为2,将其余元素设置为0.
  int myArray[3] { 2 };

1.2 获取数组大小

  要获取基于栈的C风格数组的大小,可使用std::size()函数,在<array>中。它返回size_t类型,这是定义在<cstddef>中定义的无符号整数类型。示例如下:
  std::size_t arraySize { std::size(myArray) };
  获取基于栈的C风格数组的大小的一个更老的技巧是使用sizeof运算符。sizeof运算符返回其参数的大小,以字节为单位。要获取基于栈的数组中的元素数,可以将数组的大小除以第一个元素的大小。示例如下:
  std::size_t arraySize { sizeof(myArray) / sizeof(myArray[0]) };

1.3 多维数组

  前面的代码展示了一个一维数组,可将其当作一行整数,每个数字都具有自己的编号。C++允许使用多维数组,可将二维数组看成棋盘,每个位置都具有x坐标值和y坐标值。三维数组和更高维的数组更难描绘,也极少使用。下面的代码展示了用于井字游戏棋盘的二维字符数组,然后在位于中央的方块中填充一个o。

char ticTacToeBoard[3][3];
ticTacToeBoard[1][1] = 'o';

  下面展示了这个棋盘的图像表示,并给出了每个方块的位置。

ticTacToeBoard[0][0]ticTacToeBoard[0][1]ticTacToeBoard[0][2]
ticTacToeBoard[1][0]ticTacToeBoard[1][1]ticTacToeBoard[1][2]
ticTacToeBoard[2][0]ticTacToeBoard[2][1]ticTacToeBoard[2][2]

  警告:在C++中,最好避免使用C风格数组,改用标准库功能,如std::array和std::vector。

2. std::array(C++11)

  C++中有一种固定大小的特殊容器std::array,这种容器在<array>头文件中定义。它基本上是对C风格的数组进行了简单的包装。用std::array替代C风格数组会带来很多好处:它总是知道自身大小;不会自动转换为指针,从而避免了某些类型的bug;具有迭代器,可方便地遍历元素。
  下面展示了array容器的用法。在array<int, 3>中,第一个参数表示数组中元素的类型,第二个参数表示数组的大小。

std::array<int, 3> arr { 9, 8, 7 };
std::cout << std::format("Array size = {}\n", arr.size());
std::cout << std::format("2nd element = {}\n", arr[1]);

  C++支持所谓的类模板参数推导CTAD,这可以避免为某些类模板指定尖括号之间的模板类型。CTAD仅在初始化时起作用,因为编译器使用此初始化自动推导模板类型。这适用于std::array,允许你按以下方式定义以前的数组:
  std::array arr { 9, 8, 7 };
  注意:C风格数组和std::array都具有固定的大小,在运行时数组不会增大或缩小。
  如果希望数组的大小是动态的,推荐使用std::vector。

3. std::vector

  标准库提供了多个不同的非固定大小容器,用于存储信息。std::vector就是此类容器的一个示例,它在<vector>中声明,用一种更灵活和安全的机制取代C风格数组的概念。用户不需要担心内存的管理,因为vector将自动分配足够的内存来存放其元素。vector是动态的,意味着可在运行时添加和删除元素。示例如下:

// create a vector of integers.
std::vector<int> myVector { 11, 22 };// add some more integers to the vector using push_back().
myVector.push_back(33);
myVector.push_back(44);// access elements.
std::cout << std.format("1st element: {}\n", myVector[0]);

  myVector被声明为std::vector<int>,尖括号用来指定模板参数。vector是一个泛型容器,几乎可以容纳任何类型的对象,但是vector中的所有元素必须是同一类型,在尖括号内指定这个类型。
  与std::array相同,vector类模板支持CTAD,允许你按下列方式定义myVector:
  std::vector myVector { 11, 22 };
  再次说明,需要初始化器才能使CTAD正常工作,下面是非法的
  std::vector myVector;
  为向vector中添加元素,可使用push_back()方法。可使用类似于数组的语法访问各个元素。

4. std::pair

  std::pair定义在<utility>中。它将两个可能不同类型的值组合在一起,可通过first和second公共数据成员访问这些值。示例如下:

std::pair<double, int> myPair { 1.23, 5 };
std::cout << std::format("{} {}\n", myPair.first, myPair.second);

  pair也支持CTAD,所以你可以按下列方式定义myPair:
  std::pair myPair { 1.23, 5 };

5. std::optional(C++17)

  在<optional>中定义的std::optional保留特定类型的值,或者不包含任何值。基本上,想要允许值是可选的,则可以将optional用于函数的参数。如果函数可能返回也可以不返回某些内容,则通常也将optional作为函数的返回类型。这消除了从函数中返回特殊值的需要,如nullptr、end()、-1、EOF之类的。它还消除了将函数编写为返回代表成功或失败的布尔值的需要,同时将函数的实际结果存储在作为输出参数传递给函数的实参中。
  optional类型是一个类模板,因此必须在尖括号之间指定所需的实际类型,如std::optional<int>。示例如下:

std::optional<int> getData(bool giveIt) {if ( giveIt ) {return 42;}return std::nullopt; // or simply return {};
}

  可以按下列方式调用这个函数:

std::optional<int> data1 { getData(true) };
std::optional<int> data2 { getData(false) };

  可以用has_value()方法判断一个optional是否有值,或简单地将optional用在if语句中。

std::cout << std::format("data1.has_value = {}\n", data1.has_value());
if ( data2 ) {std::cout << "data2 has a value.\n";
}

  如果optional有值,可以使用value()或解引用运算符访问它。

std::cout << std::format("data1.value = {}\n", data1.value());
std::cout << std::format("data1.value = {}\n", *data1);

  如果你对一个空的optional使用value(),将会抛出std::bad_optional_access异常。
  value_or()可以用来返回optional的值,如果optional为空,则返回指定的值。

std::cout << std::format("data2.value = {}\n", data2.value_or(0));

  注意:不能将引用保存在optional中,所以optional<T&>是无效的。但是可以将指针保存在optional中。

参考

[比] 马克·格雷戈勒著 程序喵大人 惠惠 墨梵 译 C++20高级编程(第五版)

http://www.dtcms.com/wzjs/255346.html

相关文章:

  • 上海html5网站制作公司新华传媒b2b商务平台
  • 小说类网站怎么做鹤壁网络推广哪家好
  • 公司做网站需要什么资质google谷歌
  • 武汉app开发百度seo如何快速排名
  • h5游戏排行榜前十名长沙网站seo收费
  • 个人注册域名网站怎么做今日头条最新版
  • 区块链网站开发体app开发智能网站推广优化
  • 漳州城乡建设局网站肇庆百度快速排名
  • 织梦网站模板套用windows10优化软件
  • 李志自己做网站百度客服24小时电话人工服务
  • 网站开发手机app上海优质网站seo有哪些
  • 网站建设所用程序seo百度快速排名
  • android auto扬州百度seo
  • 网站开发工程师课程代写企业软文
  • 如何做彩票网站代理百度广告怎么收费标准
  • 做网站都需要哪些软硬件广州百度seo 网站推广
  • 西安网站建设技术外包营销型企业网站的功能
  • my eclipse网站开发seo这个职位是干什么的
  • 简单炫酷的网站长春网站制作推广
  • 怎么做视频网站教程2023上海又出现疫情了
  • 邯郸建设局网站资质申报云搜索神器
  • 自己电脑做网站服务器违法吗东莞seo代理
  • 番禺建设网站平台seo面试常见问题及答案
  • 住房城乡建设委门户网站百度竞价排名收费
  • 检索网站怎么做腾讯企点qq
  • 网站如何做ins链接分享友情链接互换
  • wordpress5.6.20武汉seo推广
  • 学做视频的网站有哪些b2b模式的电商平台有哪些
  • 推广图片设计如何简洁好看企业网站优化
  • 为什么一个人做网站有难度高质量外链平台