
#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
}
楼主的这个问题很好,这是C++和java的一个重要的区别。就是说,vector中添加元素的时候,是将元素值复制到容器里。就是说容器中存放的是原始元素的副本。被复制的原始值与新容器中的元素各不相关,此后,容器内元素值发生变化时,被复制的原值不会受到影响,反之亦然。
你自己可以写个程序验证下。例如;
vector<string>vs
string s="nihao"
vs.push_back(s)
vs[0]=""
你会发现即使修改了向量中的元素,但是原来的s是没有变化的。
同理插入也是一样的。
这个概念要牢记
容器元素都是副本。不仅对vector如此,对其他容器也是一样的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)