- 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 viết mã C++ để giải quyết vấn đề này trong Leetcode:https://leetcode.com/problems/remove-element/
Cho một mảng nums và một giá trị val, hãy loại bỏ tất cả các phiên bản của giá trị đó tại chỗ và trả về độ dài mới.
Không phân bổ thêm không gian cho một mảng khác, bạn phải thực hiện việc này bằng cách sửa đổi mảng đầu vào tại chỗ với bộ nhớ bổ sung O(1).
Thứ tự của các phần tử có thể được thay đổi. Việc bạn để lại gì ngoài độ dài mới không thành vấn đề.
Ví dụ 1:
Cho các số = [3,2,2,3], val = 3,
Hàm của bạn phải trả về độ dài = 2, với hai phần tử đầu tiên của nums là 2.
Việc bạn để lại những gì vượt quá độ dài được trả lại không thành vấn đề.
Tôi có hai giải pháp:
Giải pháp A:
int RemoveElement(vector& nums, int val) {
nums.erase(remove(begin(nums), end(nums), val), end(nums));
trả về nums.size();
}
Giải pháp B:
int RemoveElement(vector& nums, int val) {
auto it = std::remove(nums.begin(), nums.end(), val);
return it-nums.begin();
}
Theo tôi, phương án B nên nhanh hơn phương án A. Tuy nhiên, kết quả lại hoàn toàn ngược lại:
Giải pháp A mất 0 mili giây, trong khi Giải pháp B mất 4 mili giây.
Tôi không biết tại sao xóa+xóa
So sánh remove
nhanh.
câu trả lời hay nhất
Đối với các vectơ thuộc loại có thể phá hủy thông thường (int
là một loại như vậy),xóa(nó, end())
Thông thường chỉ cần giảm kích thước thành viên (hoặc thành viên con trỏ, tùy thuộc vào chiến lược triển khai) hầu như không mất thời gian. 4 mili giây là một sự khác biệt rất nhỏ. Nó có thể dễ dàng được gây ra bởi tình trạng của máy. Và tôi không mong đợi những khác biệt nhỏ như vậy sẽ được tái tạo.
Nếu bạn thực sự muốn xóa các phần tử khỏi vectơ, hãy sử dụng phiên bản đầu tiên. nếu bạn thực sự muốn làm std::xóa
Để làm điều gì đó (mà bạn có thể không muốn làm), hãy sử dụng phiên bản thứ hai. Hiệu suất không phải là vấn đề ở đây.
Về c++ - tại sao xóa+xóa lại hiệu quả hơn xóa, 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/57818078/
Giả sử bạn muốn xóa một phần tử khỏi vectơ theo giá trị. Sự khác biệt giữa loại bỏ là gì? -Remove: vector v; // thêm một số giá trị vector::iterator it = remo
lớp CSensor { public: CSensor(int nVal1,char* pVal2,unsigned int nVal3);
Trong khi trả lời một câu hỏi khác, tôi tình cờ phát hiện ra cách diễn đạt hơi khác của std::vector::erase() và std::deque::erase(). Đây là những gì C++14 nói về std::de
Tôi muốn xử lý các phần tử trong một vectơ trong một thời gian. Để tối ưu hóa điều này, tôi không muốn xóa một mục khi nó đang được xử lý mà xóa tất cả các mục đã xử lý ở cuối. vector::iterator it; for(it = items.begin
std::set eras ( x ) có thực hiện xóa ( Collection.find ( x ) ); (trong đó x là const key_type&) theo cách tương tự trong STL không?
Câu hỏi này đã có câu trả lời ở đây: Làm cách nào để bắt ngoại lệ .erase trong vectơ? (2 câu trả lời) Đã đóng 8 ngày trước. khi tôi cố gắng
Tôi có đoạn mã sau: #include sử dụng không gian tên std; int main() { set S.insert("item1");
Khi xuất các phần tử bộ sưu tập trong hàm 'trợ giúp', phần tử '2' được cho là đã bị xóa. Nhưng kết quả thực tế vẫn là '1 2 3 4 5'. Tuy nhiên, kích thước của bộ sưu tập là 4. Tôi muốn biết các vấn đề tiềm ẩn. #bao gồm #bao gồm chúng tôi
Hơi khó giải thích nhưng tôi muốn tạo một trang web với hình ảnh làm nền và phủ hình ảnh bằng màu xám. Sau đó, tôi muốn thêm một số văn bản phía trên lớp phủ và ở vị trí có văn bản, lớp phủ màu xám sẽ bị xóa, do đó văn bản được viết mà không có lớp phủ màu xám. Tôi đã sử dụng hình ảnh một năm trước
Đây là mã gây ra lỗi: Factory.h: #include #include namespace BaseSubsystems { template class CFactory
Tôi đang làm việc trên vectơ cấu trúc. Khi tôi cố gắng gọi hàm này bằng một trình vòng lặp, như sau: vec2.erase (vec2.begin()+iter2); nó gửi cho tôi lỗi này: "no match for 'op
Tệp quy trình: Eraser hoặc Eraser.exe Tên quy trình: Eraser Danh mục quy trình: Quy trình có rủi ro bảo mật Mô tả tiếng Anh: Eraser.exe là tệp thực thi chính
Tôi đang viết một chương trình đơn giản sử dụng std::map::erase. Chương trình này ổn, nhưng có một số điều tôi không hiểu. Nếu tôi chuyển vòng lặp đầu tiên cho hàm xóa vượt quá khoảng thời gian của vòng lặp thứ hai, hàm sẽ không xóa
Nếu các biến của tôi là số ngẫu nhiên trong khoảng từ 0 đến 6294, làm cách nào để kết quả đầu ra của tôi chỉ in ra biến đầu tiên? Mã số ngẫu nhiên của tôi là int Random = (int)(Math.random() * 6294);
Tôi đang cố gắng vượt qua một chương trình thử nghiệm và tôi đã vượt qua tất cả các bài kiểm tra ngoại trừ khi nói đến chức năng xóa của tôi thì chương trình gặp sự cố. Dự đoán tốt nhất của tôi có lẽ là các nút canh gác phía trước hoặc phía sau đang bị xóa. Hoặc rò rỉ bộ nhớ. Câu trả lời hay nhất Tôi nghi ngờ có ai sẵn sàng đọc tất cả mã này và làm điều đó cho bạn
Thông tin cơ bản: Đây là chương trình thêm 1 vào một số được lưu trữ trong vectơ từng bit một. Các số đứng trước số 0 có thể được sử dụng làm đầu vào nhưng không được dùng làm đầu ra. Ví dụ: 0123 và 123 đều là đầu vào hợp lệ nhưng 0124 là đầu ra không hợp lệ và 124 là
Tôi đang cố gắng tạo một game bắn súng cuộn dọc trong đó khi bạn nhấn phím cách, một viên đạn sẽ được tạo ra và sau đó bị phá hủy khi viên đạn rời khỏi màn hình. Tôi theo dõi các viên đạn bằng cách khai báo chúng là đạn vector khi tôi cố gắng tiêu diệt ngoài màn hình;
Tôi đã viết mã này bên dưới và nhận thấy hành vi kỳ lạ này: #include #include #include sử dụng không gian tên std; int main() { map map1;
Tôi đã viết một trình kết xuất theo luồng cho SFML chấp nhận các con trỏ tới các đối tượng có thể vẽ và lưu trữ chúng trong một vectơ để vẽ mọi khung hình. Việc bắt đầu thêm đối tượng vào và xóa đối tượng khỏi vectơ thường sẽ gây ra lỗi phân đoạn (S
Nếu tôi muốn xóa một phần tử khỏi bản đồ (tôi không quan tâm đến giá trị trả về ngoại trừ việc kiểm tra lỗi có thể xảy ra), có hai cách để thực hiện: xóa bằng khóa giá trị hoặc xóa: http://ideone.com /YWocN7 #include # inc
Tôi là một lập trình viên xuất sắc, rất giỏi!