क्या एक वेक्टर को जगह में बदलने के लिए C ++ में एक अंतर्निहित वेक्टर फ़ंक्शन है?
या क्या आपको इसे मैन्युअल रूप से करना है?
क्या एक वेक्टर को जगह में बदलने के लिए C ++ में एक अंतर्निहित वेक्टर फ़ंक्शन है?
या क्या आपको इसे मैन्युअल रूप से करना है?
जवाबों:
इस उद्देश्य के लिए हेडर std::reverse
में एक फ़ंक्शन है algorithm
।
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
सभी कंटेनरों एक उलट की पेशकश को देखने के साथ उनकी सामग्री के rbegin()
और rend()
। इन दोनों कार्यों लौट तो calles रिवर्स iterators , जो सामान्य लोगों की तरह इस्तेमाल किया जा सकता है, लेकिन कंटेनर की तरह वास्तव में उलट है यह दिखेगा।
#include <vector>
#include <iostream>
template<class InIt>
void print_range(InIt first, InIt last, char const* delim = "\n"){
--last;
for(; first != last; ++first){
std::cout << *first << delim;
}
std::cout << *first;
}
int main(){
int a[] = { 1, 2, 3, 4, 5 };
std::vector<int> v(a, a+5);
print_range(v.begin(), v.end(), "->");
std::cout << "\n=============\n";
print_range(v.rbegin(), v.rend(), "<-");
}
आइडोन पर लाइव उदाहरण । आउटपुट:
1->2->3->4->5
=============
5<-4<-3<-2<-1
std::sort
1000 तत्व वेक्टर भी करेंगे , यदि आपको अनिर्दिष्ट क्रम में शीर्ष -10 की आवश्यकता है, क्योंकि यह अधिक से अधिक सुरुचिपूर्ण है std::partition
? यह विचार का विद्यालय है जो आज से 15 साल पहले मेरे पीसी के अनुभव को अपंग कर देता है, इस अंतर के साथ कि अभी और साइकिल बर्बाद हुई हैं, उनमें से अरबों।
print_range
सही नहीं है: जब खाली रेंज पास हो जाएगी तो यह काम नहीं करेगा ।
std::reverse(a.rbegin(), a.rend())
? ; ^)
तुम भी उपयोग कर सकते हैं std::list
के बजाय std::vector
। list
एक अंतर्निहित फ़ंक्शन सूची है: तत्वों को उलटने के लिए रिवर्स ।
अक्सर आप वेक्टर को उल्टा करना चाहते हैं इसका कारण यह है कि आप इसे अंत में सभी वस्तुओं को धक्का देकर भरते हैं लेकिन वास्तव में उन्हें रिवर्स ऑर्डर में प्राप्त कर रहे थे। उस स्थिति में आप कंटेनर को उल्टा कर सकते हैं जैसे कि आप एक deque
जगह का उपयोग करके जाते हैं और उन्हें सीधे सामने की तरफ धकेलते हैं। (या आप vector::insert()
इसके बजाय सामने की ओर से आइटम सम्मिलित कर सकते हैं , लेकिन यह तब धीमा होगा जब बहुत सारी वस्तुएं होंगी क्योंकि इसमें हर प्रविष्टि के लिए अन्य सभी वस्तुओं को फेरबदल करना होगा।) ताकि विरोध किया जा सके:
std::vector<int> foo;
int nextItem;
while (getNext(nextItem)) {
foo.push_back(nextItem);
}
std::reverse(foo.begin(), foo.end());
आप इसके बजाय कर सकते हैं:
std::deque<int> foo;
int nextItem;
while (getNext(nextItem)) {
foo.push_front(nextItem);
}
// No reverse needed - already in correct order
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int>v1;
for(int i=0; i<5; i++)
v1.push_back(i*2);
for(int i=0; i<v1.size(); i++)
cout<<v1[i]; //02468
reverse(v1.begin(),v1.end());
for(int i=0; i<v1.size(); i++)
cout<<v1[i]; //86420
}