避免重复代码——know your library(续)

之前写过一帖,避免重复代码——know your library。今天外面下雨心情不咋,干脆再来发发牢骚好了 =v=

上周某公司来这边招聘,C++版的卷里据说有一题是要求对一个装有自定义的struct的vector做排序的。struct有两个field,一个int num和一个string name;排序要求按照num升序,如果num相等则按照name升序。原题到底是啥样的我不知道,不过据说就是一个裸的struct,或许是这样?

C++代码   

struct Person {
    int num;
    string name;
};

Hmm...不知道原题里的有没有构造函数呢。随便了。反正它上面是没有重载<或==运算符的。另外,听同学说原题里的vector里装的是实例而不是指针,所以下面的代码也反映了这点。不是我想放实例进去的哦 OTL

于是要排序。嗯,当时听到一群刚考完的同学回到机房在讨论排序算法该怎么写之类的。但这是C++诶,有标准库来解决这问题,没必要自己动手不是么?

最低限度的,例如说这样:

C++代码

#include <algorithm>
#include <functional>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Person {
    int num;
    string name;

    Person(int num, string name)
        : num(num), name(name) {
    }
};

namespace std {
    template<>
    struct less<Person> {
        bool operator ()(const Person& p1, const Person& p2) {
            if (p1.num < p2.num) return true;
            if (p1.num == p2.num && p1.name < p2.name) return true;
            return false;
        }
    };
}

struct printElement {
    void operator ()(const Person& p) {
        cout << "Person: " << p.num << ", " << p.name << endl;
    }
};

int main() {
    vector<Person> v;
    v.push_back(Person(2, string("smith")));
    v.push_back(Person(1, string("john")));
    v.push_back(Person(2, string("micheal")));
    v.push_back(Person(1, string("micheal")));
    v.push_back(Person(3, string("albert")));

    sort(v.begin(), v.end(), less<Person>());

    for_each(v.begin(), v.end(), printElement());
}

// Output:
// Person: 1, john
// Person: 1, micheal
// Person: 2, micheal
// Person: 2, smith
// Person: 3, albert

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, struct
, library c++
, 代码
, num
, 一个
升序
头条号视频避免重复、电子发票避免重复报销、excel避免重复输入、怎样避免论文重复率、头条视频如何避免重复,以便于您获取更多的相关知识。

时间: 2024-10-30 00:38:03

避免重复代码——know your library(续)的相关文章

避免重复代码——know your library

刚才在读一段代码的时候看到了一个不怎么有趣的方法: C#代码 /// <summary> /// Add enough zeros to a number as to be represented on 4 characters /// </summary> /// <param name="offset"> /// The number that must be represented on 4 characters /// </param&

java android-java怎样让两个类都拥有1个类的方法,不复制,不出现重复代码

问题描述 java怎样让两个类都拥有1个类的方法,不复制,不出现重复代码 有A.B.C.D四个类, C包含了A.B都需要用到的方法; D是SDK的一个类,不可改变; A继承的C,B继承的D,怎样才能使B也拥有C的方法. 类似多继承的概念?又不能直接复制,这样代码大量重复 解决方案 public class B extends D{ private class InnerB extends C{ } } 解决方案二: 在B中定义inner class,继承C 解决方案三: 要么使用类的聚合,包含一

VS开发中的代码编写小技巧&amp;mdash;&amp;mdash;避免重复代码编写的几种方法

原文:VS开发中的代码编写小技巧--避免重复代码编写的几种方法 上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中,我们经常会遇到大量重复或者类似的代码需要编写,当然我们可以通过各种模式来避免这种情况出现,但肯定有些时候我们是无法避免的,那么遇到这种情况,我们该如何快速完成这些重复或类似的代码的编写呢.下面来说一下我的方法,当然,如果大家有更好的方法

【C大事】第四讲:重复代码封装函数的思想

将重复代码抽象成函数:判断一段字符串是否为合法的. 小技巧:把字符串转为整数后,在将其转为字符串,判断是否为源字符串.vc中可以,拿到c语言中就不适合了.   BOOL IsInt(TCHAR* str){ int i = atoi(str); TCHAR strtmp[256]; wsprintf(strtmp, "%i", i); if(strcmp(str, strtmp) != 0){ return false; }else{ return true; } }   TCHAR

提取重复代码不应该只从代码角度,可以从业务角度看看(转)

DRY(Don't Repeat Yourself )原则   凡是写过一些代码的程序猿都能够意识到应该避免重复的代码和逻辑.我们通过提取方法,提取抽象类等等措施来达到这一目的.我们总能时不时的听到类似这样的话:"把这些公用的类放到shared项目去,别的项目还要使用...",什么算是公用(重复)的代码?是不是公用(重复)的代码就要放到一个叫shared的地方? 为什么说重复的代码和逻辑会带来问题呢? 你从一个类中复制了一段代码到另一个类中,但是这段代码足够的稳定,百年不变,这样的重复

前端-Less怎么去除重复代码

问题描述 Less怎么去除重复代码 假设我的代码是下面这样的,color:red明显是重复了,但是在CSS中这样设置又是必要的,有没有办法去除重复,或者有没有必要去除这样的重复代码: .test1{ color:red; .test2{ a{ color:red; } } } 解决方案 代码重复怎么对待重复的代码C#去除数组中的重复项代码 解决方案二: http://www.ibm.com/developerworks/cn/web/1207_shenyi_lesscss/

ajax+php验证用户名重复代码实例

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.111cn.net/1999/xhtml"> <head> <meta http-equiv="conte

vb.net中的重复代码,如何写成模块(不是函数)重复调用?

问题描述 我记得以前在c或者vb中,好像重复的代码可以写在宏中,然后在程序的其他模块中反复调用.比如我在做aspx的时候,每个页面前面都有一个获取ip地址的模块,变量名也都一样,现在每个页面都要写一次,以后改动的话都要改一次,很麻烦,能不能在这个重复的代码写一次,以后各个地方调用?或者各位大大有没有方法推荐,如何优化代码.谢谢! 解决方案 解决方案二:建Module,里面写获取ip地址的方法http://msdn.microsoft.com/zh-cn/library/aaxss7da.aspx

使用匿名函数减少重复代码

在一个项目中我使用到了软件工厂的工具帮助生成了对数据库的CRUD的方法,在Logic中需要对数据层进行封装,以提供对实体操作的接口,封装后的代码如:   public  bool AddNews(News news) {     try     {         newsRep.Add(news);//执行数据库操作        return true;     }     catch (Exception ex)     {         LogLogic.AddSystemLog(th