c++ - 为什么这个 vector 声明无效?

标签 c++ string vector constructor initializer-list

我得到的错误是“expected a ;”。

    const int SIZE = 9;

    vector<string>possiblePalindromes(SIZE) = // error is shown here
        { "A man a plan a canal Panama",
          "The rain in Spain",
          "No lemon, no melon",
          "radar",
          "CS1D",
          "Was it a cat I saw?",
          "Racecar",
          "Saddleback",
          "dad" };

我的问题是,这不是有效的声明吗?如果我删除 (SIZE),错误就会消失,但我的意图是声明具有特定大小和一组预定义值的 vector 。这样当我决定遍历 vector 时,比如

for (int i = 0; i < SIZE; ++i)

我可以直接引用 vector 的 SIZE,而不是某个常量“9”。

我对这不起作用的暗示是,当我这样做时

vector<string>possiblePalindromes(SIZE)

我正在声明具有 9 个字符串默认值的大小为 9 的 vector 。这意味着 {} 中包含的所有内容根本不会被读入 vector 。

最佳答案

事实上,您正在尝试初始化类型为 std::vector<std::string> 的对象同时使用两个构造函数。

第一个构造函数如下

explicit vector(size_type n, const Allocator& = Allocator()); 

第二个构造函数是

vector(initializer_list<T>, const Allocator& = Allocator()); 

这没有意义。

您总是可以通过使用其成员函数size 来获取 vector 中元素的数量。 .你总是可以通过使用它的方法 resize 来调整 vector 的大小。 .

此外,您可以在不需要知道元素数量的情况下使用基于范围的 for 循环。

所以就这么写

vector<string>possiblePalindromes = 
    { "A man a plan a canal Panama",
      "The rain in Spain",
      "No lemon, no melon",
      "radar",
      "CS1D",
      "Was it a cat I saw?",
      "Racecar",
      "Saddleback",
      "dad" };

这是一个演示程序

#include <iostream>
#include <string>
#include <vector>

int main() 
{
    std::vector<std::string> possiblePalindromes = 
    { 
        "A man a plan a canal Panama",
        "The rain in Spain",
        "No lemon, no melon",
        "radar",
        "CS1D",
        "Was it a cat I saw?",
        "Racecar",
        "Saddleback",
        "dad" 
    };

    std::cout << "The vecor contains " << possiblePalindromes.size() << " elements\n";

    std::cout << "They are:\n";

    for ( const auto &s : possiblePalindromes )
    {
        std::cout << '\t' << s << '\n';
    }

    return 0;
}

它的输出是

The vecor contains 9 elements
They are:
    A man a plan a canal Panama
    The rain in Spain
    No lemon, no melon
    radar
    CS1D
    Was it a cat I saw?
    Racecar
    Saddleback
    dad

关于c++ - 为什么这个 vector 声明无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59795588/

相关文章:

C++——选择一组特征

java - 如何在矩形的边框上画一个点?

c++ - 复制 vector 并保留成员的内存地址

c++ - 使用 dynamic_pointer_cast 时无法动态转换

c++ - 如何理解 "Pass By Reference Within a Function"w3schools示例?

c# - 如何按位置替换字符串的一部分?

c++ - 什么时候在 C++ 程序的开头使用 '#include <string>'?

c++ - CLOCKS_PER_SEC 是否意味着每台计算机会有不同的时间概念?

c++ - 处理未知容器中所有项目的最有效方法?

string - java十进制分隔符