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

python源码分享网站专业地推团队电话

python源码分享网站,专业地推团队电话,wordpress 设置数据库,边境网站建设方案每日一题 200. 岛屿数量 class Solution {//使用深度的优先搜索来搜索岛屿图//遍历整个图片 当char数组的值为1时开始从这个点开始往外扩散搜索//注意处理边界 图不是正方形 public:int ans;int d[4][2] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};int N;int M;void dfs(vector<…

每日一题

200. 岛屿数量

class Solution
{//使用深度的优先搜索来搜索岛屿图//遍历整个图片 当char数组的值为1时开始从这个点开始往外扩散搜索//注意处理边界 图不是正方形
public:int ans;int d[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};int N;int M;void dfs(vector<vector<char>> &grid, vector<vector<int>> &vis, int i, int j){for (int k = 0; k < 4; k++){int nx = i + d[k][0];int ny = j + d[k][1];if (nx < 0 || nx > N - 1 || ny < 0 || ny > M - 1)continue;if (!vis[nx][ny]&& grid[nx][ny] != '0'){vis[nx][ny] = 1;dfs(grid, vis, nx, ny);}}}int numIslands(vector<vector<char>> &grid){ans = 0;N = grid.size();M = grid[0].size();vector<vector<int>> vis(N, vector<int>(M, 0));for (int i = 0; i < N; i++){for (int j = 0; j < M; j++){if (!vis[i][j] && grid[i][j] != '0'){ans++;vis[i][j] = 1;dfs(grid, vis, i, j);}}}return ans;}
};

C++11新特性

自动类型推导(auto 和 decltype):

        在C++中,自动类型推导是通过autodecltype来实现的。这些关键字让程序员能够在不显式指定类型的情况下,依赖编译器自动推导出变量的类型

auto:

  • auto关键字用于自动推导变量的类型。编译器根据初始化表达式的类型来推导变量的类型。
  • 它使得代码更加简洁,尤其是在声明复杂类型(如迭代器或lambda表达式)时非常有用。
  • 使用示例:
  • auto x = 42; // x的类型是int
    auto y = 3.14; // y的类型是double
    auto ptr = new int(10); // ptr的类型是int*
    

decltype:

  • decltype关键字用于推导一个表达式的类型,但与auto不同的是,decltype是在编译时对表达式类型的静态分析,返回的是表达式的实际类型。
  • 它常用于模板编程,或者当你想要获得某个表达式类型但又不确定时非常有用。
  • 使用示例:
  • int x = 42;
    decltype(x) y = 10; // y的类型是int,与x相同
    

右值引用和移动语义:

        右值引用和移动语义是C++11引入的重要特性,用来优化资源管理,尤其是在处理动态分配内存、数组、容器等时,避免不必要的深拷贝。

右值引用:

  • 右值引用是通过&&符号表示的,允许我们绑定到右值(临时对象、即将销毁的对象)上。

  • 在传统的C++中,右值只能绑定到常量或临时变量,但通过右值引用,程序员可以显式地“转移”对象的所有权。

  • 右值引用通常与移动语义一起使用,使得对象的资源(如内存、文件句柄等)能够从一个对象转移到另一个对象,而不是进行深拷贝。

  • 使用示例:

  • int&& r = 10; // r是右值引用,绑定到临时值10
    

移动语义:

  • 移动语义允许对象的资源(如内存或文件句柄)在不进行深拷贝的情况下,从一个对象“移动”到另一个对象。

  • 通过实现移动构造函数和移动赋值运算符,C++能够通过右值引用有效地转移资源而不是复制。

  • 在标准库容器(如std::vectorstd::string)中,移动语义显著提高了性能,因为容器可以直接将元素从一个容器转移到另一个容器,而不需要复制每个元素。

  • 使用示例:

  • class MyClass {
    public:MyClass(int size) : data(new int[size]) {}~MyClass() { delete[] data; }// 移动构造函数MyClass(MyClass&& other) noexcept : data(other.data) {other.data = nullptr;}// 移动赋值运算符MyClass& operator=(MyClass&& other) noexcept {if (this != &other) {delete[] data;data = other.data;other.data = nullptr;}return *this;}private:int* data;
    };
    

详解等于号运算符重载实现移动语义 

MyClass& operator=(MyClass&& other) noexcept {if (this != &other) {delete[] data;            // 1data = other.data;        // 2other.data = nullptr;     // 3}return *this;                 // 4
}

1. if (this != &other)

这行代码用来确保我们没有将一个对象赋值给它自己。我们需要避免以下的情况:

obj1 = std::move(obj1);  // 这样就会发生自赋值

如果this&other是相同的(即它们指向的是同一个对象),那么在移动操作时会导致对象的资源被错误地释放,最终使得对象处于不一致的状态。因此,首先通过这个条件判断来确保移动赋值操作不会出现自赋值的情况。

2. delete[] data;

这行代码释放当前对象的资源,尤其是类中的动态分配内存(data指针指向的内存)。在进行移动赋值操作时,我们必须释放当前对象的资源,以便为从other对象“移动”资源做好准备。

为什么要释放资源?

在“移动”资源之前,我们需要确保当前对象没有持有相同的资源。假设data指向动态分配的内存,在data = other.data;之后,dataother.data指向同一块内存。如果不释放原有的内存,就会导致内存泄漏,因为对象thisother都持有相同的资源指针,但other指针的析构时会释放这块内存,导致this的指针悬挂,出现不一致的行为。

3. data = other.data;

这行代码将other对象的data指针赋给当前对象data,实现资源的“转移”。也就是说,我们把other对象所管理的内存(资源)转移到当前对象this上。other.data指向原来的内存块,而this->data也指向同一块内存块。

此时,this对象就拥有了other对象的资源,other对象中的data指针指向了同样的内存,而other对象的资源将不再有效。

4. other.data = nullptr;

在这行代码中,我们将other.data指针置为nullptr。这是为了确保other对象在析构时不会试图释放资源。由于我们已经将other对象的资源转移给了thisother对象不再拥有该资源,因此将other.data置为nullptr可以防止其析构时错误地删除内存。

这一步是移动操作的核心,确保在移动后,other对象不会误操作原本应该由this对象管理的内存,避免多次释放同一块内存。

5. return *this;

最后,返回*this,即当前对象的引用。这是符合赋值运算符规范的做法,返回*this允许链式赋值操作,例如:

a = b = c;

这里a = b = c;首先执行b = c;,然后执行a = b;,每次都会返回赋值后的对象,以便进行下一次赋值。

为什么使用noexcept

noexcept关键字表示这个移动赋值运算符不抛出任何异常。移动操作通常不需要动态分配内存或者执行复杂的操作,因此它应该是一个不会抛出异常的操作。如果移动赋值操作抛出异常,则会破坏对象状态的一致性,并导致潜在的问题。

http://www.ritt.cn/news/87.html

相关文章:

  • 金山石化网站建设软文是什么
  • 做的好的食用菌公司网站有北京网络推广公司
  • 发布做任务网站厦门百度公司
  • 沈阳网站建设服务电话海外aso优化
  • 微信公众号优惠和网站绑定怎么做怎么网络推广
  • 网站页面如何设计成人职业培训机构
  • 做seo学网站路由优化大师官网
  • 5118素材网站优质的seo快速排名优化
  • 做网站的周记推广网站大全
  • 引用网站代码宁波网站建设优化企业
  • 手机当服务器建网站本地免费发布信息网站
  • 杭州网站建设那家好新闻发稿平台
  • 网站名字备案流程新媒体营销推广方案
  • 网站建设价格多少钱零基础怎么做电商
  • 霸州做网站的使用最佳搜索引擎优化工具
  • 贵州省建设学校官方网站湘潭网页设计
  • 网站搭建需要的公司seo按天计费系统
  • 营销最好的网站建设公司不付费免费网站
  • 文化馆为何需要建设自己的网站凤凰军事新闻最新消息
  • 高质量的邯郸网站建设seo sem是什么职位
  • 大连开发区做网站的公司网站的建设流程
  • 市政府网站集约化建设难点如何优化关键词排名到首页
  • 邵阳做网站价格广州网络seo公司
  • pvc建筑模板生产厂家seo搜索排名
  • 青岛网站制作永诚百度登录入口
  • 嵊州网站汕头疫情最新消息
  • 建公司网站要多少钱如何做好网站站内优化
  • 网站建设论文摘要百度seo营销
  • 怎么看得出网站是哪个公司做的最近一周新闻大事
  • wordpress 图片灯箱网站推广优化是什么意思