- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang làm việc trên ma trận tam giác dưới/trên (gấp đôi
) Viết một lớp học. bằng cách sử dụng n*n
Ma trận tam giác chỉ có n*(n + 1)/2
[có thể khác 0], nội bộ tôi chỉ lưu trữ số phần tử trong thành viên mảng phẳng.
Đầu tiên, tôi có một lớp cơ sở gồm các ma trận "bình thường" (tức là dày đặc), trong đó toán tử()
Là một toán tử chỉ số dưới, nó lấy các chỉ mục hàng và cột:
lớp ma trận {
public:
// […]
const ảo double &operator()(unsigned i, unsigned j);
ảo kép &operator()(không dấu i, không dấu j);
// […]
private:
std::valarray data_;
std::size_t size_;
}
// […]
const double &Matrix::operator()(unsigned i, unsigned j) {
trả về dữ liệu_[size_*i + j];
}
Đối với ma trận tam giác (tôi sẽ sử dụng ma trận tam giác sau làm ví dụ), để cung cấp giao diện giống như ma trận thông thường, tôi cần triển khai một toán tử chỉ số dưới hơi khác một chút:
const double &LowerTriangular::operator()(unsigned i, unsigned j) const ghi đè {
trả về dữ liệu_[i*(i + 1)/2 + j];
}
Mặc dù toán tử trên chưa hoàn chỉnh vì nếu người ta yêu cầu một mục nhập ở bên phải đường chéo (nhưng vẫn nằm trong ma trận lý thuyết), thì một phần tử khác (không liên quan) sẽ được trả về, nhưng 0
nên được trả lại.
Vì các tham chiếu không thể bị ràng buộc với các biến cục bộ nên tôi không thể chỉTrả về 0
. Vì vậy, làm thế nào để tôi đạt được điều này?
Tôi chỉ có thể nghĩ về một biến tĩnh cục bộ:
const double &LowerTriangular::operator()(unsigned i, unsigned j) const ghi đè {
const tĩnh gấp đôi số 0 = 0;
nếu (j > i) trả về 0;
trả về dữ liệu_[i*(i + 1)/2 + j];
}
Tôi có thể yêu cầu hàm trả về theo giá trị, nhưng còn phiên bản không phải const (khi người gọi thực sự cần sửa đổi nội dung) thì sao? Làm thế nào để đảm bảo rằng người gọi không sửa đổi không
Biến tĩnh? Điều này hoạt động, nhưng hơi xấu:
const double &LowerTriangular::operator()(unsigned i, unsigned j) const ghi đè {
tĩnh kép số 0 = 0;
if (j > i) return zero = 0 // hơi xấu nhưng vẫn hoạt động được
trả về dữ liệu_[i*(i + 1)/2 + j];
}
double &LowerTriangular::operator()(unsigned i, unsigned j) ghi đè {
return const_cast( const_cast(*this)(i, j) );
}
Vậy giải pháp tốt nhất là gì?
câu trả lời hay nhất
Tối ưu hóa bạn đã chọn xung đột với giao diện bạn cung cấp.
Một cách tiếp cận có thể là không trả về tham chiếu mà thay vào đó trả về một trình bao bọc trong suốt hoạt động giống như một tham chiếu. Tương tự như std::vector::
Nội dung. Một ví dụ:
Tham khảo cấu trúc {
phần tử kép*;
toán tử double() const {
phần tử trả về
?*yếu tố
: 0;
}
Tham chiếu& toán tử=(double d) {
nếu (phần tử!)
ném std::out_of_range("Không thể sửa đổi phía bên phải của chẩn đoán");
*phần tử = d;
return *this;
}
};
tham chiếu const
LowerTriangular::operator()(unsigned i, unsigned j) const {
return {
j>tôi
?nullptr
: dữ liệu_ + i*(i + 1)/2 + j
};
}
Thẩm quyền giải quyết
LowerTriangular::operator()(unsigned i, unsigned j) {
return {
j>tôi
?nullptr
: dữ liệu_ + i*(i + 1)/2 + j
};
}
Điều này có liên quan đến std::vector::
Có một lưu ý tương tự là việc lấy địa chỉ của tham chiếu sẽ không cung cấp cho bạn một con trỏ tới đối tượng kép. Đây có thể là sự quá tải nhà điều hành &
một trong số ít trường hợp. Có ý nghĩa. Nhưng điều này cũng có thể phản trực giác khi người dùng API biết về trình bao bọc và thực sự muốn địa chỉ của trình bao bọc.
Bạn có thể chỉ định rằng các nỗ lực sửa đổi phía bên phải của đường chéo là hành vi không xác định thay vì ném.
Về c++ - cách trả về một hằng số từ hàm thành viên (thường) trả về một tham chiếu (đến dữ liệu thành viên), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/55653109/
Làm cách nào để một chức năng được triển khai trong javascript hoặc bất kỳ ngôn ngữ thông dịch nào khác có thể được gọi sau khi hết thời gian? Nói cách khác, có một vòng lặp trong trình thông dịch javascript luôn kiểm tra danh sách bộ đếm thời gian hay có cách nào cụ thể để hệ điều hành xử lý vòng lặp này không? Cảm ơn
Tôi có dự án để làm việc. Giả thuyết là thế này: Từ một tệp có từ, tôi chỉ cần đọc các từ trong bảng chữ cái (vào danh sách có tên Từ - mã bên dưới) - Tôi thực hiện việc này bằng cách sử dụng hàm isalpha() từ lib. Mỗi phần tử của danh sách chứa một từ tôi cần lấy từ đầu vào
Tôi có hai bộ test và test1. Tôi cần xóa các phần tử khỏi test có trong test1, ví dụ: nếu test chứa 1,2,3,4,5 và test1 chứa 3,5,6,7: thì hàm sẽ là được thực hiện trong bài kiểm tra nên chỉ bên trong
Việc tham chiếu một con trỏ dẫn đến việc sử dụng gián tiếp giá trị của đối tượng. Nhưng tôi chưa bao giờ thực sự hiểu "sử dụng" nghĩa là gì. Tôi bắt đầu suy nghĩ về vấn đề này cho đến khi trình biên dịch của tôi báo lỗi cho đoạn mã sau int i = 0, *pi = &i; decltype(*pi) c;
Tôi đã đọc rất nhiều về Taint trong các biến, mẫu, v.v. của Taint trong Perl, ví dụ từ các tài liệu: $AUTOLOAD bây giờ có thể bị nhiễm độc Nếu bạn gọi một chương trình con bằng cách
Tôi đang làm việc trên các ngôn ngữ FP (bật và tắt) và đã làm việc với Scala, Haskell, F# và một số ngôn ngữ khác. Tôi thích những gì tôi thấy và hiểu một số khái niệm cơ bản về FP (chắc chắn không có nền tảng về lý thuyết phạm trù - vì vậy vui lòng không nói về toán học). Vì thế,
Trong C, khi bạn muốn lập trình chung, tùy chọn duy nhất được ngôn ngữ hỗ trợ là macro. Chúng hoạt động tốt và được sử dụng rộng rãi, nhưng việc sử dụng chúng không được khuyến khích nếu có thể sử dụng các hàm nội tuyến hoặc thông thường. (Nếu sử dụng gcc, bạn cũng có thể sử dụng gcc statemen
Tôi có một số mã thực hiện lệnh gọi request.get(), lệnh này có thể không thành công theo nhiều cách khác nhau. Tôi muốn nắm bắt các yêu cầu ngoại lệ nhưng không quan tâm tại sao cuộc gọi không thành công. Tôi muốn tránh mã như thế này hãy thử: r = reques
Tôi đang cố gắng viết một trình phân tích cú pháp C để sử dụng trong quá trình học tập của mình. Tôi biết mình có thể sử dụng một công cụ như YACC để đơn giản hóa quy trình, nhưng tôi muốn học hỏi kinh nghiệm nhiều nhất có thể nên tôi bắt đầu lại từ đầu. Câu hỏi của tôi là tôi nên xử lý một dòng như thế này như thế nào: doSo
Tôi đang thiết kế một hệ thống nhưng tôi không nghĩ nên cung cấp cho người dùng cuối khả năng xóa các mục trong cơ sở dữ liệu. Tôi nghĩ vậy bởi vì thông thường người dùng cuối, một khi họ có được quyền quản trị viên, có thể sẽ gây ra tình trạng lộn xộn trong cơ sở dữ liệu và sau đó nhờ tôi khắc phục. Tất nhiên, nếu họ
Chúng tôi có hai bảng. Trường đầu tiên chứa trường tên (varchar). Trường thứ hai chứa trường tham chiếu đến trường tên trong bảng đầu tiên. Khóa ngoại trong bảng thứ hai sẽ được lặp lại cho mỗi hàng được liên kết với tên đó. Việc sử dụng varchar/strin thường không được khuyến khích
Tôi đang phát triển một ứng dụng tập luyện rất đơn giản cho Apple Watch. Nó sử dụng Health Kit để bắt đầu và kết thúc buổi tập, vấn đề duy nhất tôi gặp phải là khi tôi cố gắng kết thúc buổi tập, nó thường không kết thúc buổi tập và tôi gặp lỗi này 20
Hiện tại, chúng tôi đang gặp phải một số vấn đề lỗi khi thực thi tập lệnh truy vấn sql. Thông báo lỗi là "Kiểm tra xác nhận hệ thống không thành công. Hãy kiểm tra nhật ký lỗi Máy chủ SQL để biết chi tiết. Thông thường, lỗi xác nhận là do lỗi phần mềm hoặc hỏng dữ liệu. Hãy kiểm tra cơ sở dữ liệu xem có bị hỏng không.
Đây là một câu hỏi rất đơn giản, nhưng dường như tôi không thể tìm ra quy tắc chung để chọn cái này hơn cái kia trong một số tình huống nhất định. Giả sử tôi có một lớp Point đơn giản như sau: class Point { public: Point();
Câu hỏi này đã có câu trả lời ở đây: Lập trình Java - Các câu lệnh SQL nên được lưu trữ ở đâu? [đã đóng] (15 câu trả lời) Đã đóng 9 năm trước.
Tôi đánh giá cao rằng câu hỏi này có thể hơi "dựa trên ý kiến", tuy nhiên, tôi nghĩ rằng một câu trả lời khái quát có thể giúp ích rất nhiều cho những người khác trong tương lai muốn tìm hiểu thêm về PWA và Nhân viên dịch vụ. Bối cảnh tôi đã tìm kiếm trực tuyến nhưng rất ngạc nhiên khi thấy không rõ ràng
Trong trường hợp của một trình thông dịch ngôn ngữ lập trình, tôi muốn biết trình tự các sự kiện mà trình thông dịch đã trải qua. Ví dụ: tôi nghĩ nó diễn ra như thế này: Trình thông dịch nhận một số đầu vào Lexer/Tokenizer nhận đầu vào và chia mã thông báo x Lấy danh sách mã thông báo ??? Mã được thực thi thuộc về những bước nào???
Tôi mới làm quen với Flutter và mới biết đến khái niệm BLoC khi đọc hướng dẫn về Flutter. Từ hướng dẫn này, lần đầu tiên tôi nghe nói về BLoC. Nhưng tôi cũng thấy trong bài đăng này có một tập tin tên là "Repository"
Tôi đang viết một lớp cho ma trận tam giác trên/dưới (gấp đôi). Bằng cách khai thác thực tế là ma trận tam giác n*n chỉ có n*(n + 1)/2 [có thể khác 0] phần tử, tôi chỉ lưu trữ nội bộ số phần tử trong thành viên mảng phẳng. Đầu tiên, tôi có một "bình thường" (
Tôi có một thư mục Java src nơi tôi lưu trữ các tệp .java của mình. Sau đó, tôi biên dịch chúng bằng terminal và kết thúc bằng các tệp .class trong cùng thư mục. Điều này không hẳn làm tôi bận tâm, nhưng tôi chưa bao giờ thấy một chuyên gia nào làm việc đó. Theo quy định chuyên môn (
Tôi là một lập trình viên xuất sắc, rất giỏi!