std :: sort如何修改支持类型?

时间:2016-02-16 10:22:28

标签: c++ sorting vector iterator

当我使用sortvector迭代器在double begin()上呼叫end()时,sort功能如何修改原始vector包含已排序的值?

虽然迭代器只是表示一个值,但它们怎么能导致原始的vector被修改?

vector<double> nums = {10.33, 20.44, 60.77};
sort(nums.begin(), nums.end(); // how does the original nums get changed?

1 个答案:

答案 0 :(得分:4)

迭代器不表示值,它表示容器,流或流缓冲区中的某个位置。从本质上讲,它们是指针的泛化。一些迭代器将允许您使用间接(*it)修改它们迭代的内容。

在最简单的情况下,它可能只是一个指针。请考虑以下代码:

vector<double> nums = {10.33, 20.44, 60.77};
double* it = &nums[0]; //get the address of the first element
++it; //increment the pointer
*it = 42; //assign 42 to nums[1]

迭代器提供了许多相同的功能(取决于迭代器的类型)。

vector<double> nums = {10.33, 20.44, 60.77};
vector<double>::iterator it = nums.begin();//get an iterator to the first element
++it; //increment the iterator
*it = 42; //assign 42 to nums[1]