c++如何把一个vector容器内容追加到另一个容器后面?

c++如何把一个vector容器内容追加到另一个容器后面?,第1张

vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库负责管理存储元素的相关内存。

容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型。c++中的容器主要使用如vector,list(顺序容器)这些都是已经封装好了的,包含头文件"vector","list",通过迭代器iterator访问容器中的数据,map,set(关联容器),关联容器map键值对形式出现key-value,key唯一,mutimap多映射可以不唯一;set是一个单一值的集合,如1,2,3,4。

和其他变量定义一样,定义vector对象要指定类型和一个变量的列表。上面的第一个定义,类型是vector<int>,该类型即是含有若干int类型对象的vector,变量名为ivec。第二个定义的变量名是Sales_vec,它所保存的元素是Sales_item类型的对象。

vector容器的特点:在内存中是一片连续的存储区域,初始化的时候,可以指定容量,比如如果定义容量50的容器存储60个string对象,由于初始容量不足60,容器将会重新定义一个容量是原来的2倍新容器,然后拷贝原容器的对象到新容器.读取速度快,插入删除效率低.如果仅仅在容器头或尾部进行增删改,推荐使用deque,专门提供了对首尾的 *** 作。

楼主的这个问题很好,这是C++和java的一个重要的区别。

c++中容器元素都是副本。

就是说,vector中添加元素的时候,是将元素值复制到容器里。就是说容器中存放的是原始元素的副本。被复制的原始值与新容器中的元素各不相关,此后,容器内元素值发生变化时,被复制的原值不会受到影响,反之亦然。

你自己可以写个程序验证下。例如;

vector<string>vs

string s="nihao"

vs.push_back(s)

vs[0]=""

你会发现即使修改了向量中的元素,但是原来的s是没有变化的。

同理插入也是一样的。

这个概念要牢记

容器元素都是副本。不仅对vector如此,对其他容器也是一样的。

用stl的算法find_if,functor做谓词,感觉更简练一些

#include <iostream>

#include <string>

#include <vector>

using namespace std

struct Table {

Table(const int n, const string&s, const int c):NUM(n),CI(s),count(c){}

int NUM

string CI

int count

}

class TheTable {

int NUM

public:

TheTable(int i):NUM(i) {}

bool operator()(Table&t) {

return t.NUM == NUM

}

}

int main () {

std::vector<Table>myvector

Table t0(1, "hello", 2), t1(2, "world", 3)

myvector.push_back(t0)

myvector.push_back(t1)

for (int i=0i<3++i) {

vector<Table>::iterator it = find_if(myvector.begin(), myvector.end(), TheTable(i))

if (it == myvector.end())

cout <<"Not found" <<endl

else {

std::cout <<"MyTable " <<(*it).CI <<'\n'

++(*it).count

}

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7868574.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存