【发布时间】:2020-12-07 11:00:38
【问题描述】:
分别将std::transform() 应用到array 和vector 之后。 array 代码按预期工作,但是,vector 代码在使用 transform() 后没有 cout 其元素:
int increment(int x)
{
return (x + 1);
}
int main()
{
std::array<int, 2> arr1{1, 2};
std::array<int, 2> arr2{};
for (const auto &item : arr1)
std::cout << "arr1: " << item << '\n';
std::transform(arr1.begin(), arr1.end(), arr2.begin(), increment);
for (const auto &item : arr1)
std::cout << "arr1: " << item << '\n';
for (const auto &item : arr2)
std::cout << "arr2: " << item << '\n';
std::vector<int> vec1{1, 2};
std::vector<int> vec2{};
for (const auto &item : vec1)
std::cout << "vec1: " << item << '\n';
std::transform(vec1.begin(), vec1.end(), vec2.begin(), increment);
for (const auto &item : vec1)
std::cout << "vec1: " << item << '\n';
for (const auto &item : vec2)
std::cout << "vec2: " << item << '\n';
return 0;
}
>>
arr1: 1
arr1: 2
arr1: 1
arr1: 2
arr2: 2
arr2: 3
vec1: 1
vec1: 2
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
在transform() 应用后丢失了项目。它由 CLion 使用 c++20 运行。
【问题讨论】:
-
你可能想要
std::back_inserter。 -
std::array<int, 2> arr2{},arr2.size()是 2,std::vector<int> vec2{};,vec2.size()是 0。