打工人日报#20250828
打工人日报#20250828
人终究会变成自己讨厌的样子
很讨厌别人在我认真干活的时候,突然大叫自己的名字,把自己吓得一哆嗦
今天,和同事讨论一个需求,不是很理解,需要其他同事协助,很不想动,我也大叫别人,说需要帮助,哎,叫完之后警觉自己现在的样子
不想动可以打电话呀、发消息呀!!!
知识点
#include <QList>
#include <QPoint>
#include <iostream>// 假设我们有一个简单的处理逻辑,将每个点的坐标值翻倍
bool test1(QList<QPoint>& pts) {for (QPoint& point : pts) {point.setX(point.x() * 2);point.setY(point.y() * 2);}return true;
}bool test2(QList<QPoint> pts) {QList<QPoint> newPts;for (const QPoint& point : pts) {newPts.append(QPoint(point.x() * 2, point.y() * 2));}// 这里可以将新的点列表做其他处理,目前简单返回truereturn true;
}bool test3(QList<QPoint>& pts, QList<QPoint>& newpts) {for (const QPoint& point : pts) {newpts.append(QPoint(point.x() * 2, point.y() * 2));}return true;
}QList<QPoint> test4(QList<QPoint> pts) {QList<QPoint> newPts;for (const QPoint& point : pts) {newPts.append(QPoint(point.x() * 2, point.y() * 2));}return newPts;
}int main() {QList<QPoint> points;points.append(QPoint(1, 1));points.append(QPoint(2, 2));QList<QPoint> newPoints;test1(points);std::cout << "After test1: ";for (const QPoint& point : points) {std::cout << "(" << point.x() << ", " << point.y() << ") ";}std::cout << std::endl;test2(points);std::cout << "After test2 (original points unchanged): ";for (const QPoint& point : points) {std::cout << "(" << point.x() << ", " << point.y() << ") ";}std::cout << std::endl;test3(points, newPoints);std::cout << "After test3 (new points in newPoints): ";for (const QPoint& point : newPoints) {std::cout << "(" << point.x() << ", " << point.y() << ") ";}std::cout << std::endl;QList<QPoint> result = test4(points);std::cout << "After test4 (result in result variable): ";for (const QPoint& point : result) {std::cout << "(" << point.x() << ", " << point.y() << ") ";}std::cout << std::endl;return 0;
}
函数区别
test1(QList& pts):
接受 QList 的引用作为参数。
直接修改输入的点列表 pts 中的点。
test2(QList pts):
接受 QList 的值作为参数,这意味着会创建 pts 的一个副本。
在函数内部创建一个新的点列表 newPts,对副本中的点进行处理并存储在 newPts 中,但不返回新列表。
test3(QList& pts, QList& newpts):
接受两个 QList 的引用,一个是输入的点列表 pts,另一个是用于存储处理后点的输出列表 newpts。
不修改输入的点列表 pts,而是将处理后的点添加到 newpts 中。
test4(QList pts):
接受 QList 的值作为参数,创建 pts 的副本。
在函数内部创建一个新的点列表 newPts,对副本中的点进行处理,并返回这个新的点列表。
优缺点分析
test1:
优点:
效率高,因为直接操作输入的列表,避免了创建新列表和数据复制的开销。
代码简洁,对于简单的就地修改操作很方便。
缺点:
会修改输入参数,可能不符合某些调用者的预期,尤其是当调用者希望输入数据保持不变时。
缺乏灵活性,如果需要保留原始数据并获取修改后的数据,就不太适用。
test2:
优点:
输入参数不会被修改,保证了输入数据的完整性。
缺点:
效率较低,因为创建了 pts 的副本,并且没有返回处理后的新列表,导致处理结果无法直接使用,除非在函数内部进行更复杂的操作来处理新创建的列表。
代码相对冗余,因为创建了新列表但没有有效利用其结果。
test3:
优点:
输入参数不会被修改,保证了输入数据的完整性。
通过输出参数 newpts 返回处理结果,适用于需要在函数外部使用处理后数据的情况,同时避免了返回值带来的潜在性能开销(如返回大型对象时的复制操作)。
缺点:
调用者需要预先创建并传递一个空的 newpts 列表,增加了调用者的负担。
函数接口相对复杂,需要传递两个参数,不够简洁。
test4:
优点:
输入参数不会被修改,保证了输入数据的完整性。
直接返回处理后的新列表,使用方便,调用者可以直接使用返回值进行后续操作。
缺点:
性能方面,创建了 pts 的副本以及新的返回列表,可能存在性能开销,尤其是处理大型列表时。
返回大型对象时,可能会有较大的复制开销,尽管现代编译器可能会进行返回值优化(RVO)。
阅读
《学会提问》
第八章:证据的效力:个人观察和调查研究
以研究报告作为证据可靠吗?
首先明白科学研究强调可重复性、控制和精确性
其次需要明白,科学研究也不是绝对正确,也可能存在质量不好、成果相互冲突、科研人员也存在自己的价值观偏见等问题
最后,在这个复杂的世界,不存在百分百的“准确性”,但是我们也不能因为不是百分百正确的东西,就断言它是错误的。
感恩
今天同事带我们去了一个新地方吃饭,只是一些小摊,但是在这“偏远地区”,很不错了!