c++代码测试-vector赋值, 证明是深度赋值

该博客主要进行C++代码测试,聚焦于vector的赋值操作。通过代码展示了对vector v1赋值、显示其元素,将v1复制到v2,删除v1元素后,观察v2元素是否受影响,以此证明vector是深度赋值。

//: c++代码测试
//  vector赋值, 证明是深度赋值
vector<int>v1;
vector<int>v2;

//v1赋值
cout << "v1赋值" << endl;
for(int i = 0; i < 5; i++){
 v1.push_back(i);
}

//显示v1的元素
cout << "显示v1的元素" << endl;
vector<int>::iterator it1 = v1.begin();
for(; it1 != v1.end(); it1++){
 cout << *it1 << " ";
}
cout << endl;

//将v1 copy 到 v2
cout << "将v1 copy 到 v2" << endl;
v2 = v1;

//显示v2的元素
cout << "显示v2的元素" << endl;
vector<int>::iterator it2 = v2.begin();
for(; it2 != v2.end(); it2++){
 cout << *it2 << " ";
}
cout << endl;

//删除v1的元素
cout << "删除v1的元素" << endl;
v1.clear();
//显示v1的元素
cout << "显示v1的元素,看是否已经删除" << endl;
it1 = v1.begin();
for(; it1 != v1.end(); it1++){
 cout << *it1 << " ";
}
cout << endl;

//显示v2的元素, 看删除v1的元素后是否影响v2
cout << "显示v2的元素, 看删除v1的元素后是否影响v2" << endl;
it2 = v2.begin();
for(; it2 != v2.end(); it2++){
 cout << *it2 << " ";
}

<think>嗯,用户想知道在C++中如何给二维vector初始化和赋值。首先,我得回忆一下C++vector的用法,尤其是二维的情况。根据提供的引用资料,有几个方法可以处理。 首先,初始化部分。引用[1]提到可以用同类型的vector来初始化,比如vector<int> b(vec0)。对于二维的情况,可能要用vector<vector<int>>。引用[4]提到定义时可以设置大小和初值,比如vector<vector<int>> v(2, vector<int>(4,1)),这样就创建了一个2行4列,初始值都是1的二维vector。这可能是一个常用的方法。 然后是赋值。用户可能需要动态调整大小或者逐个元素赋值。引用[3]提到了使用resize()方法,先初始化外层的大小,再逐个resize内层的vector。例如,先vector<vector<int>> array(m),然后循环中array[i].resize(n)。这样每个内层vector的大小就被设置为n了。 另外,引用[2]提到可以用数组来初始化vector,比如vector<int> ivec(a, a + 4),其中a是一个数组。对于二维的情况,可能需要嵌套使用这种方法,或者使用C++11的初始化列表,比如{{1,2}, {3,4}}。 还要注意,用户可能关心的是不同的初始化方式之间的区别,比如默认值是什么,是否需要预先分配空间。比如,使用resize()时,如果元素类型是int,默认初始化为0,但如果是其他类型,可能需要显式初始化。 可能用户的问题还涉及到如何动态添加行或列。比如,使用push_back()方法,添加一行vector<int>到二维vector中。或者修改现有元素的值,通过下标访问,如array[0][1] = 5。 需要确保回答覆盖不同的初始化方法(定义时初始化、使用数组初始化、resize方法),以及不同的赋值方式(逐个元素、整行添加、整块赋值)。同时,要指出不同方法的适用场景,比如预先知道大小时用resize,或者需要动态调整时用push_back。 还要注意语法正确性,比如vector<vector<int>>的尖括号之间需要有空格,或者在旧编译器中的问题。另外,C++11之后的初始化方式更简洁,比如用花括号初始化,可能也要提到。 根据引用资料中的例子,可能需要给出具体的代码示例,比如如何用循环嵌套来赋值,或者用范围构造函数来从数组初始化二维vector。同时,提醒用户注意内存管理和性能问题,比如频繁的resize可能影响效率。 最后,生成相关的问题,可能包括如何遍历二维vector、性能优化、不同初始化方法的区别,或者与其他容器的比较。这些问题可以帮助用户进一步学习。</think>在C++中,二维vector的初始化与赋值可以通过以下方法实现: ### 一、初始化方法 1. **定义时直接初始化** ```cpp // 创建3行4列,所有元素初始化为0 vector<vector<int>> matrix(3, vector<int>(4)); // 创建2行5列,所有元素初始化为1[^4] vector<vector<int>> v(2, vector<int>(5, 1)); ``` 2. **嵌套初始化列表(C++11+)** ```cpp vector<vector<int>> arr = {{1,2,3}, {4,5,6}, {7,8,9}}; ``` 3. **动态初始化** ```cpp vector<vector<int>> matrix; matrix.resize(3); // 设置3行 for(int i=0; i<3; i++){ matrix[i].resize(4); // 每行4列[^3] } ``` ### 二、赋值方法 1. **逐元素赋值** ```cpp matrix[0][1] = 5; // 修改第一行第二列元素 ``` 2. **整行赋值** ```cpp vector<int> new_row = {10,20,30}; matrix.push_back(new_row); // 添加新行 ``` 3. **块赋值** ```cpp int a[][3] = {{1,2,3}, {4,5,6}}; vector<vector<int>> mat(a, a+2); // 用二维数组初始化[^2] ``` ### 三、特殊场景 1. **不规则二维数组** ```cpp vector<vector<int>> jagged = { {1}, {2,3}, {4,5,6} }; ``` 2. **通过迭代器赋值** ```cpp vector<int> tmp{7,8,9}; matrix.insert(matrix.end(), tmp.begin(), tmp.end()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值