I have to process each element of an array the same way once and have to modify each by an unpredictable pattern afterwards aswell.
Is there any difference in performance between these snippets and why, if so?
std::vector<int> nums;
//fill nums array
for(unsigned int i = 0; i < nums.size(); ++i){
nums[i] *= nums[i];
if(nums[i] < 10){
nums[i] = 0;
}
}
std::vector<int> nums;
//fill nums array
for(unsigned int i = 0; i < nums.size(); ++i){
nums[i] *= nums[i];
}
for(unsigned int i = 0; i < nums.size(); ++i){
if(nums[i] < 10){
nums[i] = 0;
}
}
Would a different approach like this improve anything?
std::vector<int> nums;
//fill nums array
std::vector<int> flags;
flags.resize(nums.size());
for(unsigned int i = 0; i < nums.size(); ++i){
nums[i] *= nums[i];
flags[i] = nums[i] < 10;
}
for(unsigned int i = 0; i < flags.size(); ++i){
nums[i] = (!flags[i]) * nums[i]; //!flags[i] is 0 if nums[i] < 10
}
Aucun commentaire:
Enregistrer un commentaire