什么是 vector
?
vector
是 C++ 中的一种数据结构,它可以看作是一个可以动态改变大小的数组。与固定大小的数组不同,vector
在需要时可以自动增加存储空间,以容纳更多的元素。
如何使用 vector
?
首先,你需要包含 <vector>
头文件,并使用 std::vector
命名空间。
#include <vector> using namespace std;
然后,你可以创建一个 vector
:
vector<int> numbers; // 创建一个空的整数 vector
或者初始化一个 vector
:
vector<int> numbers(10); // 创建一个包含10个整数的 vector,所有元素初始化为0 vector<int> numbers(10, 1); // 创建一个包含10个整数的 vector,所有元素初始化为1 vector<int> numbers(5, 2); // 创建一个包含5个整数的 vector,所有元素初始化为2
如何操作 vector
?
-
添加元素:
numbers.push_back(3); // 在 vector 的末尾添加一个元素3
-
访问元素:
int first = numbers[0]; // 获取第一个元素 int last = numbers[numbers.size() - 1]; // 获取最后一个元素
-
改变元素:
numbers[0] = 10; // 改变第一个元素的值
-
删除元素:
numbers.pop_back(); // 删除最后一个元素
-
获取大小:
int size = numbers.size(); // 获取 vector 中的元素数量
如何遍历 vector
?
你可以使用传统的 for
循环:
for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl;
或者使用 vector
的迭代器:
for (vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) { cout << *it << " "; } cout << endl;
示例代码
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers(5, 2); // 创建一个包含5个整数的 vector,所有元素初始化为2 // 添加元素 numbers.push_back(3); // 遍历并打印 vector for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl; // 删除最后一个元素 numbers.pop_back(); // 再次遍历并打印 vector for (vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) { cout << *it << " "; } cout << endl; return 0; }
这段代码创建了一个包含5个整数的 vector
,然后在末尾添加了一个元素,接着打印了所有元素,最后删除了最后一个元素并再次打印。
如何输入vector?
将数字输入到 vector
中,可以通过多种方式实现,包括使用 push_back
方法逐个添加,或者使用初始化列表。以下是一些示例:
使用 push_back
方法
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers; // 提示用户输入数字 int num; cout << "请输入一些整数(输入非整数结束):" << endl; // 使用循环逐个读取并添加到 vector 中 while (cin >> num) { numbers.push_back(num); } // 输出 vector 中的所有数字 cout << "你输入的数字是:" << endl; for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl; return 0; }
在这个例子中,程序会提示用户输入一系列整数。每次用户输入一个数字,程序就会使用 push_back
方法将其添加到 vector
中。当用户输入非整数时(例如,一个字符或一个字符串),循环会结束,程序会输出 vector
中的所有数字。
使用初始化列表
如果你已经知道要添加到 vector
中的数字,可以在创建 vector
时使用初始化列表来一次性添加它们:
#include <iostream> #include <vector> using namespace std; int main() { // 在创建 vector 时初始化 vector<int> numbers = {1, 2, 3, 4, 5}; // 输出 vector 中的所有数字 for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl; return 0; }
在这个例子中,vector
在创建时就已经包含了初始化列表中的所有数字。
从文件读取
如果你需要从文件中读取数字并存储到 vector
中,可以使用以下方法:
#include <iostream> #include <vector> #include <fstream> using namespace std; int main() { vector<int> numbers; ifstream inputFile("numbers.txt"); // 假设文件名为 "numbers.txt" int num; while (inputFile >> num) { numbers.push_back(num); } inputFile.close(); // 输出 vector 中的所有数字 for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl; return 0; }
在这个例子中,程序从一个名为 "numbers.txt" 的文件中读取整数,并将它们添加到 vector
中。每个数字都应该在文件中单独一行。 选择哪种方法取决于你的具体需求,例如是否需要用户交互,或者数据是否已经以某种形式准备好了。
注意:当你使用 push_back
方法将数字添加到 vector
中时,新元素会被放置在 vector
的最后一个位置,并且 vector
的长度会增加一个单位。 vector
在内部管理一个连续的存储空间,当你调用 push_back
时,vector
会检查是否有足够的剩余空间来存储新元素。如果有足够的空间,新元素就会被直接添加到当前空间的末尾。如果没有足够的空间,vector
会自动分配一个新的更大的存储空间,将所有现有元素复制到新空间中,然后在新空间的末尾添加新元素,并释放旧的存储空间。 因此,从用户的角度来看,新元素总是被添加到 vector
的“末尾”,即最后一个元素的后面。这意味着新元素的索引将是当前 vector
的 size()
- 1。 这里有一个简单的例子来演示这个过程:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers; // 添加一些数字到 vector 中 numbers.push_back(10); // vector: [10] numbers.push_back(20); // vector: [10, 20] numbers.push_back(30); // vector: [10, 20, 30] // 输出 vector 中的所有数字 for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl; return 0; }
在这个例子中,vector
初始是空的。每次调用 push_back
,新数字就被添加到 vector
的末尾。最后,vector
包含了三个元素 [10, 20, 30]
,并且每个元素的位置正好是它们被添加时的顺序。
如何将数字从第一个下标的位置开始读入?
在 C++ 中,vector
不提供直接从第一个下标位置开始读入数字的函数,因为这将需要将所有现有元素向后移动,这是效率低下的。如果你确实需要从 vector
的开头插入元素,你可以使用 insert
函数,但这通常不是一个好主意,因为它会对性能产生负面影响。 如果你想要一个从第一个下标位置开始读入数字的数据结构,你可能需要使用其他的数据结构,比如 deque
(双端队列),它允许在两端快速插入和删除元素。 但是,如果你坚持要使用 vector
并希望在开头插入元素,你可以这样做:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers; // 插入一些数字到 vector 的开头 numbers.insert(numbers.begin(), 10); // vector: [10] numbers.insert(numbers.begin(), 20); // vector: [20, 10] numbers.insert(numbers.begin(), 30); // vector: [30, 20, 10] // 输出 vector 中的所有数字 for (int i = 0; i < numbers.size(); ++i) { cout << numbers[i] << " "; } cout << endl; return 0; }
在这个例子中,我们使用了 insert
函数,将新元素插入到 vector
的开头。这将导致所有现有元素向后移动,以为新元素腾出空间。这种操作的时间复杂度是 O(n),其中 n 是 vector
中元素的个数。因此,如果你频繁地进行这种操作,你的程序可能会变得非常慢。 如果你的用例确实需要频繁地在序列的开头插入元素,请考虑使用 deque
或其他更适合这种用例的数据结构。
vector可以使用cin,cout输入输出吗?
vector
可以使用 cin
和 cout
进行输入和输出,但是直接使用 cin
和 cout
输入输出整个 vector
并不常见,因为 vector
通常包含多个元素,而 cin
和 cout
是用于处理单个值的。 如果你想要输入或输出 vector
中的所有元素,你通常需要遍历 vector
,并对每个元素分别使用 cin
和 cout
。下面是一个简单的例子,展示了如何使用 cin
和 cout
与 vector
中的元素进行交互:
输入 vector 元素
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers(5); // 创建一个包含5个整数的 vector cout << "请输入5个整数:" << endl; for (int& num : numbers) { cin >> num; } return 0; }
在这个例子中,我们创建了一个包含5个整数的 vector
,并使用一个范围 for
循环遍历 vector
,使用 cin
读取用户输入的值。
输出 vector 元素
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers = {1, 2, 3, 4, 5}; // 创建并初始化一个 vector cout << "你输入的数字是:" << endl; for (const int& num : numbers) { cout << num << " "; } cout << endl; return 0; }
在这个例子中,我们创建并初始化了一个包含5个整数的 vector
,并使用一个范围 for
循环遍历 vector
,使用 cout
输出每个元素的值。 如果你想要一次性输入或输出整个 vector
,你可能需要使用其他方法,比如重载 >>
和 <<
运算符,或者使用其他输入输出库,如 C++ 标准库中的 sstream
。这些方法通常更复杂,并且需要更多的代码来处理 vector
的整体输入和输出。
制作不易,点个赞再走我康行