记录不熟悉的函数用法(C++)——assign

1. assign (仅顺序容器)

记录起因:不知道一个vector给另一个vector在不是初始化时是如何赋值的,于是翻看《C++ Primer》,在“标准库类型vector”这一节中,并没有得到解答。于是,上网搜索,搜到一篇,链接为:[STL] 如何将一个vector赋给另一个vector - Strawberry丶 - 博客园 (cnblogs.com) 的文章,里面提到了assign函数。但是,仍然不知道该函数的具体细节如何?因而继续翻看《C++ Primer》中“使用assign(仅顺序容器)”这一节,其描述如下:

顺序容器(array 除外)还定义了一个名为assign的成员,允许我们从一个不同但相容的类型赋值,或者从容器的一个子序列赋值。assign操作用参数所指定的元素(的拷贝)替换左边容器中的所有元素。例如,我们可以用assign实现将一个vector中的一段char*值赋予一个list中的string:

list<string> names;

vector<const char*> oldstyle;\

names = oldstyle; //错误:容器类型不匹配

names.assign(oldstyle.cbegin(), oldstyle.cend()); //正确,可以将const char* 转换为string

这段代码中对assign的调用将names中的元素替换为迭代器指定的范围中的元素的拷贝。assign的参数决定了容器中将有多少个元素以及他们的值都是什么。

assign的第二个版本接受一个整型值和一个元素值,它用指定数目且具有相同给定值的元素替换容器中原有的元素:

list<string> alist1(1);//等价于alist1.clear(); 1个元素,为空string

slist1.assign(10, "Hiya!"); //10个元素,每个都是“Hiya!”,等价于slist1.insert(slist1.begin(), 10, "Hiya!");

Ok, 整个过完,好像还是没给我一个很清晰的回复。我纠结的点在于:这里不是说从右边vector选取一段赋值给左边的vector嘛,可是我不是很清楚左边的容器的容量是否需要大于右边容器的容量。因此,我决定自己跑一个试一下。

以下是我测试的例子,先说结论吧,是随意长度都行,不需要考虑左边容器的容量。

    std::vector<int> m1{ 3, 4, 5, 2, 0 };
	std::vector<int> m2{ 6, 23, 43, 22, 12, 9, 3 };
	m1.assign(m2.begin(), m2.end());
	
	for (auto i : m1) {
		std::cout << i << ", ";
	}
	std::cout << std::endl;

结果:

6, 23, 43, 22, 12, 9, 3

相关推荐

  1. 记录熟悉函数用法(C++)——insert

    2024-04-30 21:08:02       29 阅读
  2. 记录熟悉函数用法(C++)——assign

    2024-04-30 21:08:02       35 阅读
  3. 【Lambda】lambdalist用法记录

    2024-04-30 21:08:02       62 阅读
  4. 【Go - 常见5类函数用法

    2024-04-30 21:08:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 21:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 21:08:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 21:08:02       82 阅读
  4. Python语言-面向对象

    2024-04-30 21:08:02       91 阅读

热门阅读

  1. 【FastGPT 】FastGPT 的知识库逻辑

    2024-04-30 21:08:02       31 阅读
  2. 用Python将Word文件另存为任意支持的格式

    2024-04-30 21:08:02       31 阅读
  3. 语法树简介

    2024-04-30 21:08:02       36 阅读
  4. C++ explicit关键字详解

    2024-04-30 21:08:02       31 阅读
  5. Gateway基本配置

    2024-04-30 21:08:02       31 阅读
  6. 【LeetCode周赛】第 394 场周赛

    2024-04-30 21:08:02       31 阅读
  7. bug定位排查

    2024-04-30 21:08:02       30 阅读
  8. .net6 数据库表新增字段迁移到生产环境

    2024-04-30 21:08:02       29 阅读
  9. python基础知识

    2024-04-30 21:08:02       31 阅读