C++ vector 和指针

标签 c++

据我所知,如果我不存储指针,C++ 中的所有内容都会被复制,这会导致性能不佳(忽略我示例的简单性)。所以我想我将我的对象存储为指针而不是 vector 中的字符串对象,这对性能更好吗? (假设我有很长的字符串并且有很多)。

当我尝试遍历我的字符串指针 vector 时出现的问题是我无法从中提取实际值

string test = "my-name";
vector<string*> names(20);
names.push_back(&test);

vector<string*>::iterator iterator = names.begin();
while (iterator != names.end())
{
    std::cout << (*iterator) << ":" << std::endl;
    // std::cout << *(*iterator); // fails

    iterator++;
}

看到注释行,我在接收字符串指针时没有问题。但是,当我尝试获取字符串指针值时,出现错误(我找不到具体的错误,但程序失败了)。

我还尝试将 (iterator) 存储在一个新的字符串 变量中,但它没有帮助?

最佳答案

您已经创建了 vector 并将其初始化为包含 20 个项目。这些项目被默认初始化,在指针的情况下是空指针。该程序在取消引用这些空指针时遇到问题。

一条建议是,在您有明确的问题之前,不要担心什么是最有效的。使用 vector<string> 时,此代码肯定会更好地工作与 vector<string*> .

关于C++ vector 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637999/

相关文章:

c++ - 加载共享库时出错 : libGLEW. so.1.10:无法打开共享对象文件

c++ - 为什么以下代码在 C 、 C++ 中给出不同的输出?

c++ - 何时使用 const char * 何时使用 const char[]

c++ - Zed Camera - 使用 openCV 在 C++ 中获取数据

c++ - 在 Visual Studio 2017 C++ 项目中 boost C++ 库 - "Cannot open include file"

c++ - 从 .txt 文件加载数组索引 - 分隔符

c++ - AVL树字典

c++ - 如果 lambda 没有指定类型,std::function 如何接受 lambda?

c++ - 奇怪的 std::map 行为

c++ - Lambda 返回 lambda 错误地推断返回类型?