zoukankan      html  css  js  c++  java
  • C++ {}语法的困惑,作为返回值的时候应该怎么理解呢?

    在做Leetcode的时候遇到的一个问题

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

     示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    来源:力扣(LeetCode)
    其中的答案是这么写的

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4         int len=nums.size();
     5 
     6         for(int i=0;i<len-1;i++)
     7         for(int j=i+1;j<len;j++)
     8         {
     9             if(nums[i]+nums[j] == target)
    10             return {i,j};
    11         }
    12         
    13        return {};
    14     }
    15 };

    其中return用的是大括号!

    这个用法我从来没见过,于是上网查找到了一个比较好的答案:

    只要构造函数不是explicit的,就可以在newInteger中调用return i而非return Integer(i)这种复杂的表达。

    但是假如现在有个新类型IntPair,其构造函数有2个int呢?那么只能乖乖的return IntPair(i, j)来返回了,有了列表初始化后就可以直接return {i, j}了。

    至于为什么不弄个像return i, j或者return (i, j)这样的语法? 因为在C语言存在逗号表达式,也就是说i,j其实是对ij的逗号表达式,返回的是j。C++兼容了C(至少是旧标准),因此得另辟蹊径简化代码。

  • 相关阅读:
    SQLServer中的死锁的介绍
    T-SQL基础--TOP
    jQuery 与js判断是否单选复选选中
    动态替换iframe的src及动态改变iframe的高度
    ztree-持续更新中
    java发送http连接
    nginx配置文件详解
    eclipse Mars4.5.2安装fatjar
    java Scanner类注意事项
    纯java+maven+sqlserver使用mybatis
  • 原文地址:https://www.cnblogs.com/SophieWang-cmu/p/12832764.html
Copyright © 2011-2022 走看看