@@ -1732,18 +1732,31 @@ impl<'a> FromIterator<&'a str> for String {
17321732#[ stable( feature = "extend_string" , since = "1.4.0" ) ]
17331733impl FromIterator < String > for String {
17341734 fn from_iter < I : IntoIterator < Item = String > > ( iter : I ) -> String {
1735- let mut buf = String :: new ( ) ;
1736- buf. extend ( iter) ;
1737- buf
1735+ let iterator = iter. into_iter ( ) ;
1736+
1737+ match iterator. next ( ) {
1738+ None => String :: new ( ) ,
1739+ Some ( buf) => {
1740+ buf. extend ( iterator) ;
1741+ buf
1742+ }
1743+ }
17381744 }
17391745}
17401746
17411747#[ stable( feature = "herd_cows" , since = "1.19.0" ) ]
17421748impl < ' a > FromIterator < Cow < ' a , str > > for String {
17431749 fn from_iter < I : IntoIterator < Item = Cow < ' a , str > > > ( iter : I ) -> String {
1744- let mut buf = String :: new ( ) ;
1745- buf. extend ( iter) ;
1746- buf
1750+ let iterator = iter. into_iter ( ) ;
1751+
1752+ match iterator. next ( ) {
1753+ None => String :: new ( ) ,
1754+ Some ( cow) => {
1755+ let buf = cow. into_owned ( ) ;
1756+ buf. extend ( iterator) ;
1757+ buf
1758+ }
1759+ }
17471760 }
17481761}
17491762
@@ -1753,9 +1766,7 @@ impl Extend<char> for String {
17531766 let iterator = iter. into_iter ( ) ;
17541767 let ( lower_bound, _) = iterator. size_hint ( ) ;
17551768 self . reserve ( lower_bound) ;
1756- for ch in iterator {
1757- self . push ( ch)
1758- }
1769+ iterator. for_each ( move |c| self . push ( c) ) ;
17591770 }
17601771}
17611772
@@ -1769,27 +1780,21 @@ impl<'a> Extend<&'a char> for String {
17691780#[ stable( feature = "rust1" , since = "1.0.0" ) ]
17701781impl < ' a > Extend < & ' a str > for String {
17711782 fn extend < I : IntoIterator < Item = & ' a str > > ( & mut self , iter : I ) {
1772- for s in iter {
1773- self . push_str ( s)
1774- }
1783+ iter. into_iter ( ) . for_each ( move |s| self . push_str ( s) ) ;
17751784 }
17761785}
17771786
17781787#[ stable( feature = "extend_string" , since = "1.4.0" ) ]
17791788impl Extend < String > for String {
17801789 fn extend < I : IntoIterator < Item = String > > ( & mut self , iter : I ) {
1781- for s in iter {
1782- self . push_str ( & s)
1783- }
1790+ iter. into_iter ( ) . for_each ( move |s| self . push_str ( & s) ) ;
17841791 }
17851792}
17861793
17871794#[ stable( feature = "herd_cows" , since = "1.19.0" ) ]
17881795impl < ' a > Extend < Cow < ' a , str > > for String {
17891796 fn extend < I : IntoIterator < Item = Cow < ' a , str > > > ( & mut self , iter : I ) {
1790- for s in iter {
1791- self . push_str ( & s)
1792- }
1797+ iter. into_iter ( ) . for_each ( move |s| self . push_str ( & s) ) ;
17931798 }
17941799}
17951800
0 commit comments