Giả sử có một danh sách các số nguyên [1,2,3,4,5] và một hàm bản đồ nhân mỗi phần tử với 10 và trả về danh sách đã sửa đổi là [10,20,30,40,50], với việc sửa đổi danh sách gốc. Làm thế nào điều này có thể được thực hiện hiệu quả trong c + +.Cách tạo hàm bản đồ trong C++?
Trả lời
Dưới đây là một ví dụ:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int multiply(int);
int main() {
vector<int> source;
for(int i = 1; i <= 5; i++) {
source.push_back(i);
}
vector<int> result;
result.resize(source.size());
transform(source.begin(), source.end(), result.begin(), multiply);
for(vector<int>::iterator it = result.begin(); it != result.end(); ++it) {
cout << *it << endl;
}
}
int multiply(int value) {
return value * 10;
}
tôi chỉ đăng bài này để minh họa sử dụng một functor trong chuyển đổi chứ không phải là một chức năng toàn cầu:
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
struct MulBy : public std::unary_function<int, int>
{
MulBy(int v) : v_(v) {}
int operator()(int lhs) const
{
return lhs * v_;
}
private:
int v_;
};
int main()
{
int incoming[5] = {1, 2, 3, 4, 5};
int result[5] = {0, 0, 0, 0, 0};
transform(&incoming[0], &incoming[5], &result[0], MulBy(10));
copy(&result[0], &result[5], ostream_iterator<int>(cout, " "));
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
struct MulBy : public std::unary_function<int, int>
{
MulBy(int v) : v_(v) {}
int operator()(int lhs) const
{
return lhs * v_;
}
private:
int v_;
};
int main()
{
vector<int> ListOfNumber;
ListOfNumber.push_back(1);
ListOfNumber.push_back(2);
ListOfNumber.push_back(3);
ListOfNumber.push_back(4);
ListOfNumber.push_back(5);
vector<int> ListResult;
ListResult.resize(ListOfNumber.size());
//Produces a new list
transform(ListOfNumber.begin(),ListOfNumber.end(),ListResult.begin(),MulBy(10));
copy(ListOfNumber.begin(),ListOfNumber.end(),ostream_iterator<int>(cout,"\t"));
//Modifies the original list
transform(ListOfNumber.begin(),ListOfNumber.end(),ListOfNumber.begin(),MulBy(10));
copy(ListResult.begin(),ListResult.end(),ostream_iterator<int>(cout,"\t"));
cin.get();
}
Dọc theo dòng @darids trả lời, nhưng C++ 03 (hiện tại tại thời điểm đăng bài gốc):
#include <vector>
#include <algorithm>
#include <functional>
std::vector<int> src;
std::vector<int> dst;
std::transform(src.begin(), src.end(),
std::back_inserter(dst),
std::bind1st(std::multiplies<int>(), 10));
Cảm ơn câu trả lời này, tôi đề nghị thêm các chỉ thị cần thiết bao gồm cho rõ ràng. – buttonupbub
Hiện tại C++ sẽ sử dụng lambda thay vì bind1st – sv90
@ sv90 chắc chắn, thời gian và C++ đã chuyển sang kể từ khi tôi đăng câu trả lời này! – msandiford
- 1. Bản đồ của hàm C++
- 2. c + + chuyển bản đồ bằng cách tham chiếu đến hàm
- 3. Bản đồ nhận dạng chung trong C#. Không muốn hàm tạo công khai
- 4. Làm cách nào để tạo ra bản đồ bản đồ?
- 5. Tạo bản đồ lambdas bằng C++
- 6. Làm cách nào tôi có thể nhận được một cá thể trong hàm tạo Bản đồ Cấu trúc Bản đồ?
- 7. gọi hàm tạo bản sao bên trong hàm tạo khác
- 8. Một hàm tạo bản sao trong C++ là gì?
- 9. Bản đồ bản đồ - cách giữ bản đồ bên trong làm bản đồ?
- 10. các hàm tạo trong C++
- 11. Cách tạo bản sao của hàm python
- 12. Persistence of std :: bản đồ trong C++
- 13. Cách tạo bản đồ trò chơi?
- 14. C++ chèn unique_ptr trong bản đồ
- 15. c + + xóa bản đồ()
- 16. Cách đặt trường văn bản ElementTree Element trong hàm tạo
- 17. Cách tốt nhất để tạo bản đồ trống trong Java
- 18. Cách tạo nhiều infowindow trong bản đồ google api
- 19. Lập bản đồ 4d trong C++?
- 20. Bản đồ Java tương đương trong C#
- 21. Cách lập bản đồ <c-leader> trong vim?
- 22. Cách tích hợp Bản đồ OpenStreet trong C# winforms
- 23. Gọi hàm tạo như một hàm trong C#
- 24. Nhiều bản đồ chính trong c + +
- 25. Tạo biểu đồ gọi cho mã C++
- 26. Tạo biểu đồ trong Excel bằng C#
- 27. tạo bản đồ android trong intellij
- 28. Tạo bản đồ đường viền
- 29. Truyền tham số cho các hàm bản đồ trong CouchDb
- 30. Gọi hàm tạo siêu trong C#
Đây có phải là bài tập về nhà không? –
Xin lỗi ... Tôi đã sử dụng chuyển đổi và for_each, không thể hồi tưởng nó vào lúc này, tôi đã tìm kiếm tham số thứ tư trong for_each suy nghĩ rằng như biến đổi: ( – yesraaj