让我们开门见山:编程很酷,但也很折磨人。那些长时间盯着屏幕,debug无休止的日子,只有程序员懂得它的酸爽。而就在这个编程焦虑的世界中,Cursor横空出世,带着一系列魔法功能,如同你手中的一根智能魔杖,让写代码变得像煮速冻面一样简单。

Cursor,一款基于AI的编程助手,号称可以从自然语言生成代码、自动修复bug、甚至帮你写文档。它到底是怎样炼成的?又如何在编程界掀起一场技术革命?它会是程序员的终极福音,还是带来失业的寒风?今天,咱们就来聊聊这个神奇的AI工具。

一、Cursor的前世今生

1. Cursor的起源:AI编程助手的崛起之路

话说,人工智能在过去十年大展拳脚,从会下围棋的AlphaGo到会画画的DALL·E,AI无处不在。可程序员们却发现,AI一边让他们失业(嗯,自动化),一边又离不开他们(嗯,调试代码)。于是,一个天才团队想:既然AI可以干那么多事情,为什么不帮程序员也省省力呢?

于是Cursor诞生了,它利用了AI的核心技术,尤其是自然语言处理(NLP)和大型语言模型(比如GPT-4),来辅助程序员完成各种编程任务。最开始,它只能做些简单的代码补全和错误提示,简直就是个“高效的智障小助手”。但随着技术的演进,它变得越来越聪明,能完成的任务也越来越多,逐渐从一个“代码秘书”升级为一位“编程魔法师”。
转载请在文章开头注明原文地址为:https://www.cnblogs.com/Sunzz/p/18425390

2. Cursor的超能力:AI编程助手的终极武器

你可能会问:“Cursor到底能做什么?它能帮我写完项目吗?” 别急,它虽然还不至于替你全程搞定,但绝对能帮你省下不少头发。

2.1 代码自动补全:终于不用手敲那些烦人的细节了

还记得那些每次写循环或函数声明时都觉得眼睛发疼的日子吗?Cursor直接解决了这个问题。它能根据你当前写的代码,自动为你补全后续代码。这就像是有个聪明的小助手,时刻站在你身边,看你码字,然后说:“哦,我懂你要干嘛!我来帮你补全后面的代码吧!”

例子:你写了一个 for 循环,Cursor可能已经猜到你想遍历某个数组,然后自动补全了循环体内的逻辑。就像它比你还懂你一样。

2.2 自动错误检测与修复:Bug猎人出动

Cursor不仅是个高效码字小助手,还是个“Bug猎人”。它能自动识别代码中的错误,并提供修复建议。举个例子,当你写错了一个变量名,Cursor会立刻弹出提醒:“老铁,这里有问题,帮你修复了。”

如果你曾因为一个逗号漏了半天没找出来,那你可能会立刻给Cursor磕头感恩。

2.3 从自然语言生成代码:程序员的‘心灵翻译器’

这是Cursor的杀手锏之一。它能将你的“人话”翻译成“机器话”。比如,你输入一句话:“我需要一个函数,计算所有奇数的平方和。” Cursor就会基于你的描述生成相应的代码。想象一下:你不再需要脑补复杂的逻辑流程,只需说出需求,代码立马呈现。

2.4 代码优化建议:做你的编程导师

Cursor不仅帮你写代码,还帮你写得更好。它可以提出代码优化建议,告诉你哪里可以使用更高效的算法或更简洁的语法,就像一个贴身的编程导师,随时随地为你指点迷津。

2.5 自动文档生成:帮你偷懒的终极工具

还在为写文档头疼吗?Cursor自动帮你生成注释和文档说明。你写的每一行代码,它都能帮你配上优雅的注释,完美解决“代码如诗,注释如坟”的局面。

2.6 多语言支持:无论你在哪个‘编程国度’

Cursor不仅局限于一种编程语言,它支持多种编程语言——Python、JavaScript、Java、C++,你能想到的主流语言,它基本都能搞定。这意味着,你可以在任何编程语言的环境下,享受Cursor的AI魔法。

转载请在文章开头注明原文地址为:https://www.cnblogs.com/Sunzz/p/18425390

二、Cursor的使用

1. Cursor的使用场景:编程的各个角落都有它的身影

1.1 快速原型开发:用它写代码,就像开了加速器

当你需要快速构建一个产品原型,Cursor能帮你省掉大量的时间。它可以自动生成代码,帮你迅速验证想法。再也不需要花数小时从零开始搭建一个项目了,Cursor可以帮你直接“从头到尾”生成基础逻辑。

1.2 复杂项目调试:它是你调试中的“侦探助手”

大型项目中,调试代码是一件费时费力的事。Cursor能够通过智能分析自动发现错误,甚至提出修复方案。在面对复杂的系统调试时,它就是你最强大的AI“侦探助手”。

1.3 学习编程的新手福音:它是“带你飞”的导师

对于新手来说,Cursor简直就是梦寐以求的老师。不会写代码?没关系,Cursor可以把你的自然语言描述翻译成代码。不会调试?没问题,它自动帮你找出代码中的问题。它不仅能让你快速上手编程,还能帮你学会如何优化代码,事半功倍。

1.4 跨语言项目:开发者的多语言助手

如果你正在开发一个跨语言的项目,Cursor的多语言支持让你不再需要每次切换语言时都得重新适应。它会帮你快速转换思维,不管是前端的JavaScript,还是后端的Python,都能轻松搞定。

2.让Cursor写一个dns服务器

今天我们来使用Cursor写代码,体验一下他到底是超级牛批呢还是小菜鸡一枚。

1. 下载安装

官网:https://www.cursor.com/

下载安装、注册登录这里略过,把内容留给有用的部分吧。

2. 开始使用吧

我这里随便新建一个文件夹MYCURSOR

然后Command + i 弹出对话框。

3.写一个dns服务器

输入我想让他实现的功能

用python写一个简单DNS服务器,要求包含的功能:

1.支持查询A记录、CNAME记录。
2.可以设置上级DNS服务器,如设置上级DNS为223.5.5.5。
3.从dns_config.txt中读取内容,如果dns_config.txt中没有对应的解析记录则去上级DNS服务器查询,如果有则返回结果,
4.dns_config.txt内容格式如下:
www.abcd.com A 1.2.3.4
www.asdf.com CNAME www.baidu.com
5.我本地IP为192.168.2.20,要求可以使用比如nslookup www.abcd.com 192.168.2.20进行查询。

几秒后,在他一顿猛如虎的操作下给出了不知道靠不靠谱的内容,且来欣赏一番。

不仅写出来simple_dns_server.py文件还是给出了使用说明。

初版
 import socket
import struct
import threading
import time
from dnslib import DNSRecord, DNSHeader, DNSQuestion, RR, A, CNAME, QTYPE # 上级DNS服务器
UPSTREAM_DNS = '223.5.5.5'
# 本地IP
LOCAL_IP = '192.168.2.20'
# DNS配置文件
CONFIG_FILE = 'dns_config.txt' # 读取DNS配置
def load_dns_config():
config = {}
with open(CONFIG_FILE, 'r') as f:
for line in f:
parts = line.strip().split()
if len(parts) == 3:
domain, record_type, value = parts
config[(domain, record_type)] = value
return config # 查询上级DNS服务器
def query_upstream(query):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5)
try:
sock.sendto(query.pack(), (UPSTREAM_DNS, 53))
data, _ = sock.recvfrom(1024)
return DNSRecord.parse(data)
except socket.timeout:
return None
finally:
sock.close() # 处理DNS请求
def handle_dns_request(data, addr, socket):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(id=request.header.id, qr=1, aa=1, ra=1), q=request.q) qname = str(request.q.qname)
qtype = request.q.qtype dns_config = load_dns_config() if qtype == QTYPE.A:
if (qname, 'A') in dns_config:
reply.add_answer(RR(qname, QTYPE.A, rdata=A(dns_config[(qname, 'A')])))
elif (qname, 'CNAME') in dns_config:
cname = dns_config[(qname, 'CNAME')]
reply.add_answer(RR(qname, QTYPE.CNAME, rdata=CNAME(cname)))
if (cname, 'A') in dns_config:
reply.add_answer(RR(cname, QTYPE.A, rdata=A(dns_config[(cname, 'A')])))
else:
upstream_reply = query_upstream(request)
if upstream_reply:
reply = upstream_reply
elif qtype == QTYPE.CNAME:
if (qname, 'CNAME') in dns_config:
reply.add_answer(RR(qname, QTYPE.CNAME, rdata=CNAME(dns_config[(qname, 'CNAME')])))
else:
upstream_reply = query_upstream(request)
if upstream_reply:
reply = upstream_reply socket.sendto(reply.pack(), addr) # 主函数
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((LOCAL_IP, 53))
print(f"DNS服务器运行在 {LOCAL_IP}:53") while True:
data, addr = sock.recvfrom(1024)
threading.Thread(target=handle_dns_request, args=(data, addr, sock)).start() if __name__ == "__main__":
main()

使用说明

4.接受Cursor生成的内容

只需点击右下角accept all即可保持代码

可以看到左右文件栏中文件simply_dns_server.py已经保存了

5.生成配置文件

接下来让他帮忙生成dns_config.txt配置

文件内容如下:

6.实践是检验真理的唯一标准

接下来见证奇迹的时刻到了,运行代码测试一下看是否可以达到预期目的

先来安装说明要求的dnslib

pip3 install dnslib
Defaulting to user installation because normal site-packages is not writeable
Collecting dnslib
Downloading dnslib-0.9.25-py3-none-any.whl (63 kB)
|████████████████████████████████| 63 kB 63 kB/s
Installing collected packages: dnslib
Successfully installed dnslib-0.9.25
WARNING: You are using pip version 21.2.4; however, version 24.2 is available.
You should consider upgrading via the '/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip' command.

然后启动dns服务器

sudo python3 simple_dns_server.py

然后运行nslookup 查询结果,

nslookup www.example.com 192.168.2.20

7.泼了一盆冷水

按照配置文件dns_config.txt中的配置www.example.com A 192.0.2.1 应该查询的结果为192.0.2.1才符合预期,我们来试试

这明显是没有读取配置文件中的内容呢,把结果告诉cursor让他改进

8.让Cursor面壁思过

可以他修改后代码有两处发生了变化,

点击Accept all接受修改

9.大功告成

重新运行dns服务器

sudo python3 simple_dns_server.py

9.1 然后再进行解析查询

这次可以看到返回结果符合预期。

9.2 再来测试一个cname的记录,

nslookup shop.example.com 192.168.2.20

可以看到符合配置文件中的设置。

9.3查询一个配置文件中不存在的解析记录;

nslookup www.cnblogs.com 192.168.2.20

可以看到查询配置中不存在的解析记录时,他会向上层dns查询。

至此,Cursor已经按照要求完成了代码的编写。

最终代码如下:

import socket
import struct
import threading
import time
from dnslib import DNSRecord, DNSHeader, DNSQuestion, RR, A, CNAME, QTYPE # 上级DNS服务器
UPSTREAM_DNS = '223.5.5.5'
# 本地IP
LOCAL_IP = '192.168.2.20'
# DNS配置文件
CONFIG_FILE = 'dns_config.txt' # 读取DNS配置
def load_dns_config():
config = {}
with open(CONFIG_FILE, 'r') as f:
for line in f:
parts = line.strip().split()
if len(parts) == 3:
domain, record_type, value = parts
config[(domain.lower(), record_type)] = value
return config # 查询上级DNS服务器
def query_upstream(query):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5)
try:
sock.sendto(query.pack(), (UPSTREAM_DNS, 53))
data, _ = sock.recvfrom(1024)
return DNSRecord.parse(data)
except socket.timeout:
return None
finally:
sock.close() # 处理DNS请求
def handle_dns_request(data, addr, socket):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(id=request.header.id, qr=1, aa=1, ra=1), q=request.q) qname = str(request.q.qname).lower().rstrip('.')
qtype = request.q.qtype dns_config = load_dns_config() if qtype == QTYPE.A:
if (qname, 'A') in dns_config:
reply.add_answer(RR(qname, QTYPE.A, rdata=A(dns_config[(qname, 'A')])))
elif (qname, 'CNAME') in dns_config:
cname = dns_config[(qname, 'CNAME')]
reply.add_answer(RR(qname, QTYPE.CNAME, rdata=CNAME(cname)))
if (cname.lower(), 'A') in dns_config:
reply.add_answer(RR(cname, QTYPE.A, rdata=A(dns_config[(cname.lower(), 'A')])))
else:
upstream_reply = query_upstream(request)
if upstream_reply:
reply = upstream_reply
elif qtype == QTYPE.CNAME:
if (qname, 'CNAME') in dns_config:
reply.add_answer(RR(qname, QTYPE.CNAME, rdata=CNAME(dns_config[(qname, 'CNAME')])))
else:
upstream_reply = query_upstream(request)
if upstream_reply:
reply = upstream_reply socket.sendto(reply.pack(), addr) # 主函数
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((LOCAL_IP, 53))
print(f"DNS服务器运行在 {LOCAL_IP}:53") while True:
data, addr = sock.recvfrom(1024)
threading.Thread(target=handle_dns_request, args=(data, addr, sock)).start() if __name__ == "__main__":
main()

dns_config.txt内容如下:

www.example.com A 192.0.2.1
blog.example.com CNAME www.example.com
mail.example.com A 192.0.2.2
ftp.example.com A 192.0.2.3
shop.example.com CNAME store.example.com
store.example.com A 192.0.2.4
api.example.com A 192.0.2.5
cdn.example.com CNAME content.example.com
content.example.com A 192.0.2.6
support.example.com A 192.0.2.7

10.细思极恐

我们一共给cursor说了三句话,他就把所有内容生成了,而且实现了我的要求

第一句话:说明我的需求。
第二句话:让他生成dns_config.txt配置文件。
第三句话:把错误给他,让他改正。

你觉得Cursor强大吗,会不会有一天代替你呢

转载请在文章开头注明原文地址为:https://www.cnblogs.com/Sunzz/p/18425390

三、Cursor对程序员行业的冲击:你会失业吗?

随着AI编程工具如Cursor的崛起,很多程序员会有一个现实的担忧:“这东西会不会取代我?”虽然Cursor的确让编码变得更高效,但它并不会让程序员“失业”。相反,它让程序员的工作方式发生转变,未来可能更多依赖于创新和战略性技能,而非简单的代码编写。

1 初级程序员面临的挑战:重复劳动的消亡

对不起,新手程序员,AI有点“不客气”。初入行的你,可能从事大量重复性工作,比如模板代码的编写、简单功能的实现、bug修复等。这些任务通常不需要太多创造力,反而更依赖经验积累和耐心。而这些“繁琐任务”正是Cursor的强项。

例子: 假设你是一名刚入职的程序员,任务是为一个电商网站的后端构建用户注册模块。传统情况下,你需要:

  • 编写表单验证逻辑
  • 设置数据库交互
  • 实现输入数据的校验和处理

而Cursor可以自动生成这些常见的模块和逻辑。你可能需要花几个小时完成的模板代码,它几秒钟就搞定。这意味着公司可能会减少初级程序员的人数需求,因为很多基础性代码已可以通过AI工具快速生成。

但不要慌!机会依然存在。

初级程序员面对的挑战不在于他们会被完全取代,而是角色和技能将需要重新定义。未来,入门级程序员需要更快掌握以下几个方面:

  • 掌握AI工具的使用:如何与Cursor等AI工具协作,将成为基本技能。
  • 提升理解业务需求的能力:AI可以生成代码,但理解业务需求并转化为技术实现仍需要人的介入。
  • 跨领域知识:例如理解UI/UX设计、产品开发等,让自己不只是“代码工匠”,而是具备多样化技能的开发者。

2 高级程序员需求上升:你要学会驾驭‘魔法’

相较于初级程序员,高级程序员的前景更为乐观。事实上,AI工具如Cursor的广泛应用,将加速高级开发人才的需求。原因在于,AI工具虽然能够生成代码,但高级开发工作中涉及的设计、架构和复杂决策仍需要人类的创造性思维和经验。

例子: 如果你是一个高级架构师,在负责搭建一个微服务架构的大型企业系统。你需要考虑:

  • 系统的可扩展性和容错性
  • 如何设计微服务之间的通信协议
  • 如何优化数据存储和检索

这些高级别的系统设计问题,AI目前无法替代。Cursor虽然能够帮助你快速生成一些基础的服务逻辑,但当涉及到性能优化、跨团队的技术协作以及复杂的架构设计时,还是得依赖你脑中的“魔法公式”。

Cursor成了**“超级助手”**,帮你自动生成一些琐碎代码,让你有更多的时间和精力去思考系统整体架构、前瞻性的技术规划、创新功能设计等高层次问题。

因此,高级程序员不仅不会被Cursor替代,反而能更加专注于发挥自己的创造力与经验,将AI当作工具,提高开发效率。

重点在于:驾驭工具,而非被工具控制。

要做到这一点,高级程序员需要进一步强化自己在以下领域的技能:

  • 架构设计能力:了解复杂系统的架构,尤其是能够处理大规模、高并发的系统设计。
  • 战略性思维:不仅能写代码,更要思考代码对整个项目、产品和业务的影响。
  • AI工具的深度掌握:高级程序员需要不仅会使用AI工具,还能调整和定制这些工具来满足复杂需求。

3 编程技能的演变:你不只是‘代码工匠’,还是‘技术指挥家’

随着AI工具的普及,未来程序员的角色将发生重大变化。编程已经不再是单纯的写代码——更多的是思考如何解决问题、如何设计复杂系统、如何与机器智能协作。这让程序员从“代码工匠”转型为“技术指挥家”。

例子: 想象一下,你现在的角色不再是坐在电脑前一行行写代码,而是像指挥家一样,分配不同的AI工具去处理各个部分:

  • 让Cursor生成代码
  • 让另一个AI工具进行代码审查
  • 你自己负责把所有模块拼接成一个完整的系统

在这种情境下,编程技能的演变非常关键:

  • 战略性系统思维:未来的程序员不仅需要懂得如何写代码,还要懂得如何整体设计和把控技术策略。
  • 问题解决能力:AI工具可以帮你生成代码,但它们解决不了你面临的所有问题——尤其是那些涉及深层业务逻辑和复杂算法的挑战。
  • 跨团队协作:随着AI工具的普及,开发团队将更加专注于创新性功能的设计和实现。如何与设计师、产品经理甚至AI工具紧密合作,将成为开发工作的重要部分。

技能的转型:掌握AI与技术的融合之道

程序员们需要学习的不仅是编程语言,还有如何与AI共存与合作。未来的核心技能之一是如何将AI工具与自己的工作流程无缝结合,从

总结:Cursor的冲击与机遇并存

最终,Cursor和其他AI编程工具带来的不仅是挑战,还有大量机会。虽然初级程序员可能面临某种程度的压力,但未来将涌现出更多高级开发需求,更多侧重于战略、架构和复杂问题解决的工作。

程序员的角色不会因为AI而消失,反而会变得更具创造性和价值。Cursor并不是程序员的“替代者”,而是他们的“工具箱”中又多了一件利器。掌握如何与AI工具共舞,将成为每一个程序员在未来技术世界中的核心竞争力。

所以,不用担心失业,关键在于如何利用AI工具变得更聪明、更高效,并在新技术浪潮中始终保持学习与进化的状态。

还不赶紧去试试Cursor?让它带你飞吧,感受AI编程助手的魔力!

"放开那代码让我来!"——Cursor帮你写代码的奇妙之旅的更多相关文章

  1. 如何让Java编译器帮你写代码

    作者:京东零售 刘世杰 导读 本文结合京东监控埋点场景,对解决样板代码的技术选型方案进行分析,给出最终解决方案后,结合理论和实践进一步展开.通过关注文中的技术分析过程和技术场景,读者可收获一种样板代码 ...

  2. CodeGuide 300+文档、100+代码库,一个指导程序员写代码的,Github 仓库开源啦!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.路怎样走,让你们自己挑 B站 视频:https://www.bilibili.com/vi ...

  3. 写代码有这16个好习惯,可以减少80%非业务的bug

    前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ github地址,感谢每颗star ❝ ...

  4. AI写代码! 神器copilot介绍+安装+使用

    !郑重提示!!!!!!!: 正在学编程.算法的同学请千万不要依赖此插件,否则你可能甚至无法手写出一个for循环 AI帮我写代码?我帮AI写代码?庄周梦蝶?蝶梦庄周?十分梦幻. copilot在VSco ...

  5. php在哪里写代码?

    php在哪里写代码? php可以在PhpStorm中写代码. PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码 ...

  6. 帮初学者改代码——playerc之“练习:求完数问题”(下)

    前文链接:帮初学者改代码——playerc之“练习:求完数问题”(上) 再来看看be_ferfect()应该如何改. be_ferfect()函数的功能是判断number是否为完数,同时把因子对写入d ...

  7. 帮初学者改代码——playerc之“练习:求完数问题”(上)

    原文:“练习:求完数问题” 原代码: // #include <stdio.h> #include <stdlib.h> #include <math.h> #de ...

  8. Magicodes.NET框架之路——让Magicodes.NET帮你编写代码

    时间总是过得很快,而我几乎没有时间来安安静静的写博客和完善文档.不过总算是框架在一直前进,而我的计划是在今年年底(公历)前,让此框架成熟稳定. 在很长一段时间里,我尝试了很多我之前没有接触的技术或者没 ...

  9. android 中的一些资源注解,让编译器帮你检查代码

    android 中的一些资源注解,让编译器帮你检查代码 写方便的时候可以用注解来声明一些参数,以明确的指示参数的类型,让代码更安全.我们看到,在android源代码里大量使用了注解.我整理了一些注解如 ...

  10. 推荐4款个人珍藏的IDEA插件!帮你写出不那么差的代码

    @ 目录 Codota:代码智能提示 代码智能补全 代码智能搜索 Alibaba Java Code Guidelines:阿里巴巴 Java 代码规范 手动配置检测规则 使用效果 CheckStyl ...

随机推荐

  1. WorPress基础之谷歌GSC与GA统计代码安装

    本篇文章讲介绍什么是GSC和GA以及如何安装. 什么是GSC GSC,全称为Google Search Console,由谷歌官方提供的网站管理工具,可帮助监控和维护网站在Google 搜索结果中的展 ...

  2. git篇-- Git在项目实操中常见的使用命令--02

    Git是现代软件开发中不可或缺的版本控制工具.它能帮助开发者跟踪项目的所有变更,并与团队成员高效协作.本文将介绍一些在项目实操中常见的Git命令,帮助你更好地管理代码. 1. 初始化和配置 初始化仓库 ...

  3. 【CI/CD】Jenkins 部署前后端项目Demo

    前置环境准备: 参考尚硅谷最新发布的Jenkins教程 同样准备了三台服务器: 192.168.124.34 Centos7 8G内存 用于安装GitLab 192.168.124.35 Centos ...

  4. 【转载】 TensorFlow - 框架实现中的三种 Graph图结构

    原文地址: https://zhuanlan.zhihu.com/p/31308381 -------------------------------------------------------- ...

  5. vscode远程连接远程主机上的docker —— 设置命令 —— -p 5001:5001

    突然有这么一个需求,就是使用windows上vscode远程连接到远端linux主机上的docker容器上做开发,各种配置后发现总是在远端主机上创建project时候失败,最后总是在创建远端主机上do ...

  6. 中电信翼康济世数据中台基于Apache SeaTunnel构建数据集成平台经验分享

    作者 | 中电信翼康工程师 代来编辑 | Debra Chen 一. 引言 Apache SeaTunnel作为一个高性能.易用的数据集成框架,是快速落地数据集成平台的基石.本文将从数据中台战略背景. ...

  7. JAVA for Cplex(更新版)

    一.Cplex的介绍 Cplex是一种专门用来求解大规模线性规划问题的求解工具.不仅仅是LP问题,对于二次规划 QP,二次有约束规划QCP,混合整数线性规划MIP问题,甚至Network Flow问题 ...

  8. 使用 refreshNuxtData 刷新 Nuxt应用 中的数据

    title: 使用 refreshNuxtData 刷新 Nuxt应用 中的数据 date: 2024/8/21 updated: 2024/8/21 author: cmdragon excerpt ...

  9. mfc的ClistCtrl控件列的排序

    在网上看了许多排序的方法,都没看懂,初学者的悲剧,然后就自己弄了个,请大家指正. ClistCtrl控件的行带着一个结构体,不过那结构体不好懂,看得眼花缭乱.好多也弄不明白,就自己写了个结构体,把一行 ...

  10. 后缀数组--SA--字符串

    SA (Suffix Array) -- 后缀数组 简介 这里明白两个定义: \(SA_i\) : 按字典序排列后大小为 \(i\) 的后缀的后缀头的下标. \(Rank_i\) : 后缀头的下标为 ...