c++ STL初始化手法合集

1、【c++11】初值列

ContType c(initlist);

ContType c = initlist;

eg:const std::vector<int>v1{1,2,3,4,523,3246,34,42,4};

(array<>容器例外)

2、“针对某个给定区间”

依赖迭代器,大概。 以 另一容器、C-style array、标准输入 的元素为初值。构造函数是member template,元素类型也可以不同,但需要存在自动转换机制(我不建议自动转换,写了你至少加个注释)。

eg:

【以某一容器的元素】 std::list<int>L;std::vector<float> v(L.begin(),L.end());

【以C-style array为元素】int carray[]={1,2,3,4,5,6,7};std::set<int> c(carray,carray+sizeof(carray)/sizeof(carray[0]));

        【c++11】<iterator>:std::set<int> c(std::begin(carray),std::end(carray));

【从标准输入设备】std::deque<int> c((std::istream_iterator<int>(std::cin)),(std::istream_iterator<int>()));

【c++11 move】std::list<int> L;std::vector<int>c(std::make_move_iterator(L.begin()),std::make_move_iterator(L.end()));

【c++11 move】std::vector<int>v1;std::vector<int>v2 = std::move(v1);

### C++ 中函数传参的方式及类型 C++ 提供了多种函数传参方式,每种方式都有其特定的应用场景和特点。以下是主要的几种传参方式及其适用范围: #### 1. **值传递** 在值传递中,实际参数的副本会被传递给形式参数。这意味着,在函数内部对形参所做的任何更改都不会影响到原始的实际参数。 - 特点: - 实参与形参之间是独立的。 - 数据安全性高,因为不会直接修改实参的内容。 - 对于基本数据类型的传递较为高效,但对于大型对象或复杂结构体可能会带来性能开销,因为它涉及复制操作。 - 示例代码: ```cpp void mySwapValue(int a, int b) { int temp = a; a = b; b = temp; // 这里的交换仅限于本地作用域内的a和b,并不影响外部变量 } ``` 上述例子展示了如何通过值传递实现两个整数的交换尝试[^2],但由于值传递的本质特性,这种交换对外部无影响。 #### 2. **指针传递 (地址传递)** 当需要在函数内修改外部变量时,可以使用指针作为参数。这种方式允许函数访问并修改指向内存位置上的数据。 - 特点: - 高效,尤其是处理大尺寸的对象或者数组时。 - 可能引入潜在的风险,比如解引用错误可能导致程序崩溃。 - 如果不需要修改原数据而仅仅是为了提高效率,则应考虑常量指针(const pointer),以保护数据不被意外改动。 - 示例代码: ```cpp void mySwapPointer(int* a, int* b){ int temp = *a; *a = *b; *b = temp; // 此处真正实现了外部变量之间的互换 } ``` 此段代码利用指针来完成两数值间的有效交换。 #### 3. **引用传递** 引用是一种别名机制,它使得我们可以像对待普通变量一样对待另一个已存在的变量。这既保持了值传递的安全性又避免了额外的拷贝成本。 - 特点: - 更加简洁直观,语法上类似于按值调用但行为更接近于按址调用。 - 不同于指针的是,引用一旦初始化就不能再重新绑定新的实体;而且无需显式的解除引用操作符(*)即可操作所关联的目标物。 - 和指针相比更加安全可靠,减少了悬空指针等问题的发生几率。 - 示例代码: ```cpp void mySwapReference(int &a, int &b){ int temp = a; a = b; b = temp; // 同样达到了改变外界变量的目的 } ``` 这里给出了基于引用版本的swap方法,同样能够达到预期效果的同时还具备更好的可读性和维护便利度。 另外需要注意的一点是在跨语言交互场合下,例如C# 调用 C++ DLL 的情况里提到`init(int* data, int size)`这样的接口定义[^1],显然采用了指针的形式来进行批量数据的操作,这是因为在不同编程环境间共享资源的时候往往倾向于选用低级抽象层次的表现手法——即裸指针而非高级别的封装概念如STL容器之类的东西。 综上所述,选择合适的参数传输模式取决于具体需求以及上下文中涉及到的因素考量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值