Giriş
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar dizilyi tersine çevirmeyi gösteriyor.
Metodun içi muhtemelen şöyle.
Elimizde şöyle bir kod olsun. Bu kod B belleği yeterince büyük olmadığı için tanımsız davranışa sebep olur.
Şöyle yaparız.
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar dizilyi tersine çevirmeyi gösteriyor.
reverse metodu
Şöyle yaparız.
string foo = "String";
std::reverse(foo.begin(),foo.end());
cout << foo << endl;// will output "gnirtS"
template <typename Iterator>
void reverse_any(Iterator left, Iterator right) {
using std::swap;
while (left != right) {
--right;
if (left == right)
break;
swap(*left, *right);
++left;
}
}
reverse_copy metodu
reverse_copy() için verilen hedef bellek yeterince büyük olmalıdır. Eğer değilse tanımsız davranış olablir. Eğer reverse_copy() ile uğraşmak istemiyorsak std::back_inserter() da kullanılabilir. Şöyle yaparızstd::string A = "abc";
std::string B;
std::reverse_copy(A.begin(), A.end(), std::back_inserter(B));
ÖrnekElimizde şöyle bir kod olsun. Bu kod B belleği yeterince büyük olmadığı için tanımsız davranışa sebep olur.
string A = "abc";
string B;
reverse_copy(A.begin(),A.end(),B.begin();
cout<<B<<endl;
//Output: (literally nothing)
Düzeltmek için şöyle yaparızstd::string A = "abc";
std::string B;
B.resize(A.size()); // make B big enough
std::reverse_copy(A.begin(), A.end(), B.begin());
std::cout << B << '\n';
ÖrnekŞöyle yaparız.
ba::streambuf response;
std::vector<char> v = ...;
std::reverse_copy(begin(v), end(v), std::ostreambuf_iterator<char>(&response));
Hiç yorum yok:
Yorum Gönder