কোনও ভেক্টরকে জায়গায় রেখে উল্টাতে সি ++ তে কি বিল্ট-ইন ভেক্টর ফাংশন রয়েছে?
অথবা আপনি নিজেই এটি করতে হবে?
কোনও ভেক্টরকে জায়গায় রেখে উল্টাতে সি ++ তে কি বিল্ট-ইন ভেক্টর ফাংশন রয়েছে?
অথবা আপনি নিজেই এটি করতে হবে?
উত্তর:
এই উদ্দেশ্যে শিরোনামে একটি ফাংশন std::reverseরয়েছে algorithm।
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
সমস্ত পাত্রে তাদের সামগ্রী এবং এর সাথে একটি বিপরীত দৃশ্য সরবরাহ করে । এই দুটি ফাংশন তাই-কলগুলি বিপরীত পুনরাবৃত্তির প্রত্যাবর্তন করে , যা সাধারণের মতো ব্যবহার করা যেতে পারে, তবে এটি ধারকটি আসলে বিপরীত হয়েছে বলে মনে হবে।rbegin()rend()
#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::sort1000 টি উপাদান ভেক্টর, যদি আপনার কেবল অনির্ধারিত ক্রমে শীর্ষ -10 প্রয়োজন, কারণ এটি এর চেয়ে আরও মার্জিত std::partition? এটি এমন চিন্তাভাবনার স্কুল যা আমার পিসি অভিজ্ঞতাটিকে পঙ্গু করে তোলে যেমনটি 15 বছর আগে হয়েছিল, তবুও আরও অনেক চক্র নষ্ট হয়ে গেছে তার পার্থক্য নিয়ে with
print_rangeসঠিক নয়: খালি পরিসরটি পাস করার পরে এটি কাজ করবে না ।
std::reverse(a.rbegin(), a.rend())? ;।)
আপনি std::listপরিবর্তে ব্যবহার করতে পারেন std::vector। বিপরীত উপাদানগুলির জন্য listএকটি অন্তর্নির্মিত ফাংশন তালিকা :: বিপরীত ।
প্রায়শই আপনি ভেক্টরটিকে বিপরীত করতে চান কারণ হ'ল আপনি সমস্ত আইটেমটি শেষে চাপিয়ে দিয়েছিলেন তবে বাস্তবে সেগুলি বিপরীত ক্রমে পেয়েছিলেন। সেক্ষেত্রে আপনি dequeপরিবর্তে ব্যবহার করে এবং সরাসরি সম্মুখ দিকে ঠেলা দিয়ে আপনি ধারকটিকে বিপরীত করতে পারেন । (অথবা আপনি এর vector::insert()পরিবর্তে সামনের আইটেমগুলি সন্নিবেশ করতে পারেন , তবে প্রচুর আইটেম থাকলে তা ধীর হবে কারণ এটি প্রতিটি সন্নিবেশের জন্য অন্যান্য সমস্ত আইটেমগুলিকে বদলাতে হবে to) সুতরাং বিপরীতে:
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
}