@@ -1197,6 +1197,31 @@ impl<T> VecDeque<T> {
1197
1197
}
1198
1198
}
1199
1199
1200
+ /// Removes the last element from the `VecDeque` and returns it, or `None` if
1201
+ /// it is empty.
1202
+ ///
1203
+ /// # Examples
1204
+ ///
1205
+ /// ```
1206
+ /// use std::collections::VecDeque;
1207
+ ///
1208
+ /// let mut buf = VecDeque::new();
1209
+ /// assert_eq!(buf.pop_back(), None);
1210
+ /// buf.push_back(1);
1211
+ /// buf.push_back(3);
1212
+ /// assert_eq!(buf.pop_back(), Some(3));
1213
+ /// ```
1214
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
1215
+ pub fn pop_back ( & mut self ) -> Option < T > {
1216
+ if self . is_empty ( ) {
1217
+ None
1218
+ } else {
1219
+ self . head = self . wrap_sub ( self . head , 1 ) ;
1220
+ let head = self . head ;
1221
+ unsafe { Some ( self . buffer_read ( head) ) }
1222
+ }
1223
+ }
1224
+
1200
1225
/// Prepends an element to the `VecDeque`.
1201
1226
///
1202
1227
/// # Examples
@@ -1241,38 +1266,13 @@ impl<T> VecDeque<T> {
1241
1266
unsafe { self . buffer_write ( head, value) }
1242
1267
}
1243
1268
1244
- /// Removes the last element from the `VecDeque` and returns it, or `None` if
1245
- /// it is empty.
1246
- ///
1247
- /// # Examples
1248
- ///
1249
- /// ```
1250
- /// use std::collections::VecDeque;
1251
- ///
1252
- /// let mut buf = VecDeque::new();
1253
- /// assert_eq!(buf.pop_back(), None);
1254
- /// buf.push_back(1);
1255
- /// buf.push_back(3);
1256
- /// assert_eq!(buf.pop_back(), Some(3));
1257
- /// ```
1258
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
1259
- pub fn pop_back ( & mut self ) -> Option < T > {
1260
- if self . is_empty ( ) {
1261
- None
1262
- } else {
1263
- self . head = self . wrap_sub ( self . head , 1 ) ;
1264
- let head = self . head ;
1265
- unsafe { Some ( self . buffer_read ( head) ) }
1266
- }
1267
- }
1268
-
1269
1269
#[ inline]
1270
1270
fn is_contiguous ( & self ) -> bool {
1271
1271
self . tail <= self . head
1272
1272
}
1273
1273
1274
- /// Removes an element from anywhere in the `VecDeque` and returns it, replacing it with the
1275
- /// last element.
1274
+ /// Removes an element from anywhere in the `VecDeque` and returns it,
1275
+ /// replacing it with the first element.
1276
1276
///
1277
1277
/// This does not preserve ordering, but is O(1).
1278
1278
///
@@ -1286,28 +1286,28 @@ impl<T> VecDeque<T> {
1286
1286
/// use std::collections::VecDeque;
1287
1287
///
1288
1288
/// let mut buf = VecDeque::new();
1289
- /// assert_eq!(buf.swap_remove_back (0), None);
1289
+ /// assert_eq!(buf.swap_remove_front (0), None);
1290
1290
/// buf.push_back(1);
1291
1291
/// buf.push_back(2);
1292
1292
/// buf.push_back(3);
1293
1293
/// assert_eq!(buf, [1, 2, 3]);
1294
1294
///
1295
- /// assert_eq!(buf.swap_remove_back(0 ), Some(1 ));
1296
- /// assert_eq!(buf, [3, 2 ]);
1295
+ /// assert_eq!(buf.swap_remove_front(2 ), Some(3 ));
1296
+ /// assert_eq!(buf, [2, 1 ]);
1297
1297
/// ```
1298
1298
#[ stable( feature = "deque_extras_15" , since = "1.5.0" ) ]
1299
- pub fn swap_remove_back ( & mut self , index : usize ) -> Option < T > {
1299
+ pub fn swap_remove_front ( & mut self , index : usize ) -> Option < T > {
1300
1300
let length = self . len ( ) ;
1301
- if length > 0 && index < length - 1 {
1302
- self . swap ( index, length - 1 ) ;
1301
+ if length > 0 && index < length && index != 0 {
1302
+ self . swap ( index, 0 ) ;
1303
1303
} else if index >= length {
1304
1304
return None ;
1305
1305
}
1306
- self . pop_back ( )
1306
+ self . pop_front ( )
1307
1307
}
1308
1308
1309
- /// Removes an element from anywhere in the `VecDeque` and returns it,
1310
- /// replacing it with the first element.
1309
+ /// Removes an element from anywhere in the `VecDeque` and returns it, replacing it with the
1310
+ /// last element.
1311
1311
///
1312
1312
/// This does not preserve ordering, but is O(1).
1313
1313
///
@@ -1321,24 +1321,24 @@ impl<T> VecDeque<T> {
1321
1321
/// use std::collections::VecDeque;
1322
1322
///
1323
1323
/// let mut buf = VecDeque::new();
1324
- /// assert_eq!(buf.swap_remove_front (0), None);
1324
+ /// assert_eq!(buf.swap_remove_back (0), None);
1325
1325
/// buf.push_back(1);
1326
1326
/// buf.push_back(2);
1327
1327
/// buf.push_back(3);
1328
1328
/// assert_eq!(buf, [1, 2, 3]);
1329
1329
///
1330
- /// assert_eq!(buf.swap_remove_front(2 ), Some(3 ));
1331
- /// assert_eq!(buf, [2, 1 ]);
1330
+ /// assert_eq!(buf.swap_remove_back(0 ), Some(1 ));
1331
+ /// assert_eq!(buf, [3, 2 ]);
1332
1332
/// ```
1333
1333
#[ stable( feature = "deque_extras_15" , since = "1.5.0" ) ]
1334
- pub fn swap_remove_front ( & mut self , index : usize ) -> Option < T > {
1334
+ pub fn swap_remove_back ( & mut self , index : usize ) -> Option < T > {
1335
1335
let length = self . len ( ) ;
1336
- if length > 0 && index < length && index != 0 {
1337
- self . swap ( index, 0 ) ;
1336
+ if length > 0 && index < length - 1 {
1337
+ self . swap ( index, length - 1 ) ;
1338
1338
} else if index >= length {
1339
1339
return None ;
1340
1340
}
1341
- self . pop_front ( )
1341
+ self . pop_back ( )
1342
1342
}
1343
1343
1344
1344
/// Inserts an element at `index` within the `VecDeque`, shifting all elements with indices
0 commit comments