Bir int ve bir dize tutan bir vektör oluşturmaya çalışıyorum. Mümkün mü? Örneğin İki farklı veri türünü veya sınıfını tutan bir vektör oluşturma
Ben açılı ayraçlar<
>
içinde bildirilmiş türde
string x= "Picture This"
Bir int ve bir dize tutan bir vektör oluşturmaya çalışıyorum. Mümkün mü? Örneğin İki farklı veri türünü veya sınıfını tutan bir vektör oluşturma
Ben açılı ayraçlar<
>
içinde bildirilmiş türde
string x= "Picture This"
Hayır, bir vector
sadece tutmalı değişkenleri tutmak vector<int>myArr
istiyorum.
Bir int
üyesi ve string
üyesine sahip olan bir sınıf oluşturmak ve sonra bu sınıfın örneklerini tutmak için bir vector
oluşturun ve gerektiğinde daha sonra int
veya string
üyelerine başvuruda başladı. int
türünde
Sınıfa işaretçiler kaydetmeye gerek yok. – chris
@chris Peki, bu uygulamaya bağlı olurdu. –
@CoryKlein: Gerçekten. Ancak öğrenenler için tavsiye, kaplarda işaretçilerden hiç bahsetmemelidir.Çok nadiren ihtiyaç duyuluyor ve bu kadar kolay dağılıyor, eldeki asıl sorun ona ihtiyaç duyulana kadar bu olasılığı açıklayarak hiçbir amaca hizmet etmiyor. Ve sonra akıllı işaretçiler önerirsiniz. – MSalters
numaralı myArr
türüne örnekleme gerçekleştirilmiştir. Yalnızca int
türünü depolayabilir.
Bir birliği kullanabilirsiniz, ancak daha iyi alternatifler vardır.
Sen işlevsellik bu tür almak için boost::variant
kullanabilirsiniz:
using string_int = boost::variant<std::string, int>;
std::vector<string_int> vec;
bir dize ya da varyant dışında bir int ya almak için, boost::get
kullanabilirsiniz:
std::string& my_string = boost::get<std::string>(vec[0]);
Düzenleme
Eh, şimdi 2017. Artık, std::variant
'a sahip olduğumuz için variant
'a sahip olmak için Boost'a ihtiyacınız yok!
Sabit boyutlu bir dize ('const char []') ve destek kullanmanıza gerek kalmadan bir tamsayıya sahip bir '' '' '' '' '' '' '' '' '' ''' oluşturabilirsiniz. Ayrıca 'std :: string' kullanabilirsiniz, ancak yok etmek için doğru türü seçmek için destructor için bir tür etiketi ile' struct' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' ''. Cevabımdaki bağlantının sonuna bak. – devil
Üzgünüz, char [] 'için' const' gerekmez. – devil
@devil _not_ kullanımı Boost için birkaç iyi sebep vardır. –
vektör kullanabileceğiniz iki farklı türlerini tutmak istiyorsanız bir std::pair
(veya std::tuple
eğer ikiden fazla)
03 C++:
std::vector<std::pair<int, std::string> > myArr;
vektör istiyorsanız İki farklı tip olarak kullanılabilecek bir tip tutun: Hayır, yapılamaz.
Evet iki farklı türde tutmak mümkündür, vector
union
türlerini oluşturabilirsiniz. Kullanılan alan türlerden daha büyük olacaktır. Sendika türleri, türünü nasıl etiketleyebileceğinizle birlikte here açıklanır. Küçük bir örnek:
union Numeric
{
int i;
float f;
};
std::vector<Numeric> someNumbers;
Numeric n;
n.i = 4;
someNumbers.push_back(n);
Ayrıca std::string
kullanabilirsiniz ancak yok etmek doğru türünü seçmek için yıkıcı için bir tür etiketine sahip bir struct
içinde union
yerleştirmek gerekir. Bağlantının sonuna bakın.
http://www.boost.org/doc/libs/1_54_0/doc/html/variant.html – chris
olası bir kopyası [C++ 'da farklı sınıfların nesnelerini tutabilecek bir dizi oluşturma] (http: // stackoverflow .com/questions/2764671/create-an-array-hangi-can-hold-nesneleri-of-farklı-sınıfları-in-c) – hivert
Bekleyin, ikisini de veya int ya da string tutmak ister misiniz her elementte? – chris