Tôi đang bị rắm não lúc này và tôi đang tìm kiếm một cách nhanh chóng để lấy một mảng và chuyển một nửa số đó thành một hàm. Nếu tôi có một mảng A trong mười phần tử, trong một số ngôn ngữ tôi có thể truyền một thứ gì đó như A [5:] cho hàm và được thực hiện với nó. Có một cấu trúc tương tự trong c + +? Rõ ràng tôi muốn tránh và sắp xếp chức năng lặp.Có cách nào trong C++ để lấy một mảng phụ từ một mảng không?
Trả lời
Có. Trong đồng bằng C bạn sử dụng con trỏ, nhưng trong C++ bạn có thể sử dụng bất kỳ loại iterator (một con trỏ có thể được coi là một iterator).
template<typename Iter>
void func(Iter arr, size_t len) { ... }
int main() {
int arr[10];
func(arr, 10); // whole array
func(arr, 5); // first five elements
func(arr + 5, 5); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.size()); // All elements
func(vec.begin(), 5); // first five
func(vec.begin() + 5, vec.size() - 5); // all but first 5
return 0;
}
Bí quyết thông thường là chuyển con trỏ đến phần tử đầu tiên của mảng, sau đó sử dụng đối số riêng để truyền độ dài của mảng. Thật không may không có kiểm tra giới hạn, vì vậy bạn phải cẩn thận để làm cho nó đúng hoặc bạn sẽ scribble vào bộ nhớ của bạn.
Bạn cũng có thể sử dụng một nửa phạm vi mở. Đây là cách phổ biến nhất để làm điều đó. Nhiều chức năng trong thư viện chuẩn (như std::sort
) hoạt động theo cách này.
template<class Iter>
void func(Iter start, Iter end) { ... }
int main() {
int arr[10];
func(arr, arr + 10); // whole array
func(arr, arr + 5); // first five elements
func(arr + 5, arr + 10); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.end()); // whole vector
func(vec.begin(), vec.begin() + 5); // first five elements
func(vec.begin() + 5, vec.end()); // all but the first five elements
return 0;
}
Một lần nữa, không kiểm tra giới hạn.
Tôi nghĩ rằng khuôn mẫu bạn đang nói đến là: 'template
Chỉ cần 'template
nếu bạn muốn kiểm tra giới hạn sử dụng truy cập có giới hạn, '& vec.at (5)' hoặc 'vec.begin() + max (5, vec.size())' nếu '5' thực sự là 'nhiều nhất là 5' . – jthill
- 1. Phương pháp tốt nhất để tạo một mảng phụ từ một mảng trong C
- 2. Cách tốt nhất để tạo mảng phụ từ mảng hiện có trong C++ là gì?
- 3. Cách lấy mảng giá trị từ một mảng kết hợp?
- 4. C# linq - lấy các phần tử từ mảng không tồn tại trong một mảng khác nhau
- 5. Perl Làm thế nào để lấy một mảng từ một mảng băm?
- 6. Có cách nào để lấy một lát đến cuối một mảng ẩn danh trong Perl không?
- 7. Có thể lấy IntPtr từ một mảng int []?
- 8. Cách nhận một mảng tháng trong C#
- 9. Cách lấy vị trí của một khóa trong một mảng
- 10. Làm cách nào tôi có thể lọc một mảng băm để chỉ lấy các khóa trong một mảng khác?
- 11. cách trả về mảng char từ một hàm trong C
- 12. Cách Pythonic để tạo một mảng numpy từ danh sách các mảng có nhiều mảng
- 13. Khởi tạo một mảng bên trong một cấu trúc từ một mảng trong C++
- 14. Làm cách nào để gọi một phần tử trong một mảng có nhiều mảng?
- 15. Làm thế nào để có được một mảng phụ của mảng trong Java, mà không cần sao chép dữ liệu?
- 16. Lấy chiều dài mảng của một mảng 2D trong Java
- 17. Cách lấy cột từ một mảng java 2D?
- 18. Lấy phần tử cụ thể từ mỗi mảng phụ
- 19. Cách xóa một mảng trong Visual C#
- 20. Không thể tạo một mảng trong C#
- 21. Làm thế nào để bạn đọc một mảng byte từ một DataRow trong C#?
- 22. Cách lấy một mảng các lớp con trong Rails
- 23. Chất lỏng: Tôi có thể lấy một phần tử ngẫu nhiên từ một mảng không?
- 24. Lấy một phần tử từ danh sách mảng trong Android?
- 25. 'Cách Ruby' để lặp qua một mảng - từ mảng [n] đến mảng [n - 1] là gì?
- 26. Làm cách nào để sao chép một phần của mảng sang mảng khác trong C++?
- 27. Có cách nào để khởi tạo một mảng với các biến không liên tục không? (C++)
- 28. C# mảng trong một struct
- 29. Tạo một Eigen Matrix từ một mảng C
- 30. Làm cách nào để lấy chỉ mục của một phần tử trong một mảng?
Có lẽ chức năng của bạn nên dùng trình vòng lặp. – chris
Bạn không thể chuyển mảng vào hàm trong C++ vì C++ không có giá trị mảng. Vậy chức năng của bạn thực sự là gì? – melpomene
Tôi có một mảng int [] a = {1,2,3,4,5,6,7,8,9,10}. Sau đó tôi đang tìm cách để có được một mảng phụ int [] a1 = {6,7,8,9,10}. –