这是一个头文件,其中包含无关域中的实用程序。
- 对:这些是可以容纳两种不同类型值的对象。
- 通用关系方法:用于特定名称空间rel_ops下的关系运算符!=,>,=。
- 通用交换函数( Generic swap 函数) :这是标准定义,默认情况下,标准库的组件将其用于所有不提供自身重载的类型:swap。
职能:
- swap :交换两个对象的值。
// CPP program to illustrate // the use of swap function #include
#include using namespace std; // Driver Program int main () { // a: _ _ _ _ (empty array in beginning) int a[4]; // Initializing, a: _ _ _ _ & b: 10 20 30 40 int b[] = {10, 20, 30, 40}; // After swapping, a: 10 20 30 40 & b: _ _ _ _ swap(a, b); cout << "a contains:"; for (int i; i<4;i++) cout << a[i]< 输出:
a contains:10 20 30 40
- make_pair :构造一个配对,其第一个元素设置为x,第二个元素设置为y。
// CPP program to illustrate // the use of make_pair #include
#include using namespace std; // Driver program int main () { // Initializing the pair with int type pair a; pair b; // Use of the make_pair function a = make_pair (10, 20); // It's ok to write like this as implicit // conversion takes place from pair b = make_pair (15.5, 'B'); // Printing the fist and second values of the pair cout << "a: " << a.first << ", " << a.second << endl; cout << "b: " << b.first << ", " << b.second << endl; return 0; } 输出:
a: 10, 20 b: 15, 66
- move :它作为右值移动。 move用于指示对象可以“从中移出”,即允许将资源从一个对象(要移动)转移到另一个对象。
// CPP program to illustrate // the use of move #include
#include #include #include using namespace std; // Driver Program int main () { string s = "Hello!!"; string s1 = "I am a geek."; vector gfg; // It copies 's' in gfg gfg.push_back (s); // It moves 's1' in the gfg(containing 's') gfg.push_back (move(s1)); cout << "gfg contains:"; for (int i=0;i< gfg.size(); i++) cout << ' ' << gfg[i]; cout< 输出:
gfg contains: Hello!! I am a geek.
- move(元素范围) :它将[first,last)范围内的元素移到从结果开始的范围内。
执行此操作后,移出范围内的元素仍将包含适当类型的有效值,但不一定与移走前的值相同。// CPP program to // Illustrate the use of vector // move range of elements #include
// for move (ranges) #include // for move (objects) #include #include #include using namespace std; // Driver program int main () { vector string1 = {"Hello!", "I", "am", "a", "geek"}; vector string2 (5); // moving ranges: cout << "Moving ranges...\n"; // use of move i.e.it moves from first to last element in // string 1 to the string2 from it's(string 2) starting move ( string1.begin(), string1.begin()+5, string2.begin() ); cout << "string1 contains " << string1.size() << " elements\n"; cout << "string2 contains " << string2.size() << " elements(after moving):"; for (int i=0; i 输出:
Moving ranges... string1 contains 5 elements string2 contains 5 elements(after moving):Hello! I am a geek
- move_if_noexcept :如果其move构造函数未引发异常,则获取对其参数的右值引用;否则,获取对其参数的左值引用。
// CPP program to illustrate // the use of move_if_noexcept #include
#include using namespace std; struct Bad { Bad() {} // may throw Bad(Bad&&) { cout << "Throwing move constructor called"< 输出:
Non-throwing move constructor called Throwing copy constructor called
- decval :它返回一个右值引用,而不引用任何对象。
如果自变量的移动构造函数从不抛出,则此函数选择参数的类型作为右值引用;如果该类型是可复制构造的,则该函数将其选择为左值引用。如果类型都不是,函数将返回一个右值,将为仅移动类型(即使它们可能抛出)选择该右值。
某些操作可以通过移动或复制对象来实现,通常针对右值移动并针对左值进行复制:与不再需要对象(例如右值)时进行复制相比,移动通常是更有效的操作。// CPP program to illustrate // the use of declval #include
#include using namespace std; //class struct A { virtual int value() = 0; }; // Class with constructor class B : public A { int val_; public: B(int i, int j):val_(i*j){} int value() { return val_; } }; // Driver Program int main() { // int a decltype(declval().value()) a; // int b decltype(declval().value()) b; //same as constructor a = b = B(100, 20).value(); cout << a << endl; return 0; } 输出:
2000
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。