2013-06-05 39 views
11

Sadece öğreniyorum ve muhtemelen aptal bir sorum var.std :: list yeniden boyutlandırma sonuçlarını yeniden boyutlandırma

2 konteynere sahibim, biri bir vektör, diğeri ise bir listedir. İkisi de 1,2,3,4 numaralı mürekkeplerle doldurulur. İlklendirildikten sonra kapsayıcıyı yedi boyutlu olarak yeniden boyutlandırdıktan sonra kapsayıcının içeriğini yazdırayım.

List: 1 
List: 2 
List: 3 
List: 4 
List: 0 
List: 1994995248 
List: 0 
Vector: 1 
Vector: 2 
Vector: 3 
Vector: 4 
Vector: 0 
Vector: 0 
Vector: 0 

açıkça bunu önlemek için 0s ekliyorum liste söylemek zorunda mısın: Ben alıyorum çıktısında

#include <iostream>  
#include <vector>  
#include <list> 

int main() 
{ 
std::list<int> lst= {1,2,3,4}; 
std::vector<int> vec = {1,2,3,4}; 

lst.resize(7); 
vec.resize(7); 

for (auto p = lst.begin(); p!=lst.end(); ++p) 
    std::cout<<"List: "<<*p<<std::endl; 

for (auto p = vec.begin(); p!=vec.end(); ++p) 
    std::cout<<"Vector: "<<*p<<std::endl; 

return 0; 
} 

?

+2

Hangi derleyiciyi kullanıyorsunuz? Burada yeniden üretemiyorum gibi görünüyor: http: //ideone.com/9BwQJ6. Yeniden boyutlandırırken değeri belirtmezseniz, başlangıç ​​değeri olmalıdır. – taocp

+0

http://www.cplusplus.com/reference/list/list/resize/ – Nic007

+0

Aslında, aslında noktaları doldurmak için varsayılan değeri kullanmalı gibi görünüyor, ancak 'lst.resize (7, 0)' ı çağırmayı deneyebilirsiniz ; 'sadece ne olacağını görmek için. – cxyzs7

cevap

1

Diğer kullanıcılar gönderdiği gibi, lst.resize(7,0) sorununuzu çözecektir. lst.resize(7)'u kullanarak ve başlatma değerini bırakarak derleyiciye değerin ne olduğu önemli olmadığını (muhtemelen daha sonra ayarlayacağınız için) bildirir. Bu, işletim sisteminin bellekte herhangi bir rasgele değerin yer değiştirmesine izin vermek yerine kaynakları harcayarak bırakmasına izin verir.

Vector konteyner, diğer taraftan, otomatik sıfıra öğeleri başlatır kodunu içerir.

+2

Listenin diğer öğeleri için gereken standardı düşündüm. 0 'da – blue

+0

olarak başlatılmıştır. Ancak bu, C++ standardına uygun değildir, bu da yeni elemanların değer olarak başlatılmasını gerektirir (ve böylece int' için sıfır başlatılır). –

+0

Tipik bir uygulamada, "resize", ikincisi bir değer başlatılmış varsayılan argümanı olan iki parametreye sahiptir. Bu sebepten dolayı lst.resize (7) 'lst.resize (7, 0)' a eşdeğerdir ve yeni öğeleri sıfırlarla başlatmayı garanti eder. Diğer uygulamalar bunu farklı şekilde yapabilir (aşırı yükleme vb.), Ancak sonuç aynı olmalıdır. – AnT

İlgili konular