stl 物件之間的交換

2021-10-24 03:26:49 字數 3925 閱讀 1811

描述:

交換兩個物件的值。

函式定義:

template

<

class

t>

void

swap

( t& a, t& b )

;template

<

class

t>

void

swap

( t& a, t& b )

noexcept

(/* see below */);

template

<

class

t>

constexpr

void

swap

( t& a, t& b )

noexcept

(/* see below */

);

引數:

a, b - 要交換的值

示例:

int

main()

; std::vector<

int> vecint2 =

; std::

swap

(vecint1, vecint2)

;auto print =

(int na)

; std::

for_each

(vecint1.

begin()

, vecint1.

end(

), print)

;//3 4

std::cout << std::endl;

std::

for_each

(vecint2.

begin()

, vecint2.

end(

), print)

;//1 2

}

描述:

交換兩個迭代器所指向的元素。

函式定義:

template

<

class

forwardit1

,class

forwardit2

>

void

iter_swap

( forwardit1 a, forwardit2 b )

;template

<

class

forwardit1

,class

forwardit2

>

constexpr

void

iter_swap

( forwardit1 a, forwardit2 b )

;

引數:

a, b - 指向要交換的元素的迭代器

可能的實現:

template

<

class

forwardit1

,class

forwardit2

>

constexpr

void

iter_swap

(forwardit1 a, forwardit2 b)

// c++20 起為 constexpr

示例:

int

main()

; std::vector<

int> vecint2 =

; std::

iter_swap

(vecint1.

begin()

, vecint2.

begin()

);auto print =

(int na)

; std::

for_each

(vecint1.

begin()

, vecint1.

end(

), print)

;//3 2

std::cout << std::endl;

std::

for_each

(vecint2.

begin()

, vecint2.

end(

), print)

;//1 4

}

描述:

交換兩個範圍的元素。

在範圍 [first1, last1) 和始於 first2 的另一範圍間交換元素。

函式定義:

template

<

class

forwardit1

,class

forwardit2

>

forwardit2 swap_ranges

( forwardit1 first1, forwardit1 last1,

forwardit2 first2 )

;template

<

class

forwardit1

,class

forwardit2

>

constexpr forwardit2 swap_ranges

( forwardit1 first1, forwardit1 last1,

forwardit2 first2 )

;

引數:

first1, last1 - 要交換的第乙個元素範圍

first2 - 要交換的第二個元素範圍的起始

返回值:

返回始於 first2 的範圍中被交換的最末元素後一元素的迭代器。

可能的實現:

template

<

class

forwardit1

,class

forwardit2

>

forwardit2 swap_ranges

(forwardit1 first1,

forwardit1 last1,

forwardit2 first2)

return first2;

}

示例:

int

main()

; std::vector<

int> vecint2 =

; std::

swap_ranges

(vecint1.

begin()

, vecint1.

begin()

+3, vecint2.

begin()

);auto print =

(int na)

; std::

for_each

(vecint1.

begin()

, vecint1.

end(

), print)

;//6 7 8 4 5

std::cout << std::endl;

std::

for_each

(vecint2.

begin()

, vecint2.

end(

), print)

;//1 2 3 9 10

}

STL 函式物件

一 函式物件 functor stl中提供了一元和二元函式的兩種functor,通過unary function和binary function提供了這兩種不同引數數量的functor的基本結構,在這兩個型別中,分別內嵌定義一元和二元函式操作在模版推演的時候需要用到的typedef.一元函式的定義為...

STL 函式物件

4.1函式物件 4.1.1函式物件概念 過載函式呼叫操作符的類,其物件常稱為函式物件 函式物件使用過載的 時,行為類似函式呼叫,也叫仿函式 本質 函式物件 仿函式 是乙個類,不是函式 函式物件使用 特點 函式物件在使用時,可以像普通函式那樣呼叫,可以有引數,可以有返回值 函式物件超出普通函式概念,函...

物件之間的關係

下面以物件間的耦合度和關係的強弱性的由低到高進行描述 依賴 dependency 物件之間最弱的一種關聯方式,是臨時性的關聯。中一般指由區域性變數 函式引數 返回值建立的對於其他物件的呼叫關係。圖 依賴關係 1 就是乙個物件呼叫被依賴物件中的某些方法而得以完成這個物件的一些職責 2 這是一種比較鬆散...