@@ -1732,18 +1732,31 @@ impl<'a> FromIterator<&'a str> for String {
1732
1732
#[ stable( feature = "extend_string" , since = "1.4.0" ) ]
1733
1733
impl FromIterator < String > for String {
1734
1734
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
+ }
1738
1744
}
1739
1745
}
1740
1746
1741
1747
#[ stable( feature = "herd_cows" , since = "1.19.0" ) ]
1742
1748
impl < ' a > FromIterator < Cow < ' a , str > > for String {
1743
1749
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
+ }
1747
1760
}
1748
1761
}
1749
1762
@@ -1753,9 +1766,7 @@ impl Extend<char> for String {
1753
1766
let iterator = iter. into_iter ( ) ;
1754
1767
let ( lower_bound, _) = iterator. size_hint ( ) ;
1755
1768
self . reserve ( lower_bound) ;
1756
- for ch in iterator {
1757
- self . push ( ch)
1758
- }
1769
+ iterator. for_each ( move |c| self . push ( c) ) ;
1759
1770
}
1760
1771
}
1761
1772
@@ -1769,27 +1780,21 @@ impl<'a> Extend<&'a char> for String {
1769
1780
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1770
1781
impl < ' a > Extend < & ' a str > for String {
1771
1782
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) ) ;
1775
1784
}
1776
1785
}
1777
1786
1778
1787
#[ stable( feature = "extend_string" , since = "1.4.0" ) ]
1779
1788
impl Extend < String > for String {
1780
1789
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) ) ;
1784
1791
}
1785
1792
}
1786
1793
1787
1794
#[ stable( feature = "herd_cows" , since = "1.19.0" ) ]
1788
1795
impl < ' a > Extend < Cow < ' a , str > > for String {
1789
1796
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) ) ;
1793
1798
}
1794
1799
}
1795
1800
0 commit comments