当我使用sort
和vector
迭代器在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?
答案 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]